質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

5904閲覧

swift2 Alamofire 3.1.4 HTML UTF-8日本語文字化けについて

ziko8jp

総合スコア7

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/02/23 09:31

Xcode初心者です。

以下の環境下でiOSエミュレーター上にてhttp経由のhtml取得時、
UTF-8エンコードされた日本語が文字化けしてしまいます。

■環境
Xcode 7.2.1
言語 swift2
Alamofire 3.1.4
iOSエミュレーター iPhone6s

■Alamofire実装部

strURL = "https://www.ziko8jp.info/get_vcp_real_time_select.php?site_name=ALL&country=ALL" let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:] defaultHeaders.updateValue("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", forKey: "Accept") defaultHeaders.updateValue("gzip, deflate, sdch", forKey: "Accept-Encoding") defaultHeaders.updateValue("ja,en-US;q=0.8,en;q=0.6", forKey: "Accept-Language") defaultHeaders.updateValue("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36", forKey: "User-Agent") configuration.HTTPAdditionalHeaders = defaultHeaders let manager = Alamofire.Manager.sharedInstance manager.session.configuration.HTTPAdditionalHeaders = defaultHeaders // 非同期処理開始 // responseStringでも同じ事象 manager.request(.GET, strURL).responseData { response in switch(response.response?.statusCode){ case HttpStatus.SC_OK?: break; case HttpStatus.SC_NOT_FOUND?: break; default: break; } }

■ブレークポイントでrequestオブジェクトをprintした所

<NSMutableURLRequest: 0x7f80248f7be0> { URL: https://www.ziko8jp.info/get_vcp_real_time_select.php?site_name=ALL&country=ALL }

■ブレークポイントでresponseオブジェクトをprintした所

<NSHTTPURLResponse: 0x7f802487f1d0> { URL: https://www.ziko8jp.info/get_vcp_real_time_select.php?site_name=ALL&country=ALL } { status code: 200, headers {
Connection = close;
"Content-Encoding" = gzip;
"Content-Length" = 8153;
"Content-Type" = "text/html";
Date = "Tue, 23 Feb 2016 09:20:25 GMT";
Server = Apache;
Vary = "Accept-Encoding";
"X-Powered-By" = "PHP/5.5.9-1ubuntu4.11";
} })

どなたか解決方法が分かる方ご回答の程宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2016/02/23 10:14

問題のポイントは、「エミュレータ上」で文字化けすることですか?
ziko8jp

2016/02/23 12:25

質問ありがとうございます。 いえ、response.result.value!.utf8等でprintした際、文字化けします。
t_obara

2016/02/23 14:23

strURLに記載のURLが本番用であれば、上の方の通りと思います。 また、curlなどを利用して、ファイルとして保存した上で、どの文字コードになっているか確認するといった確認手段をすると、問題の切り分けをしやすいと思います。
guest

回答1

0

ベストアンサー

現在、動作確認できる環境がありませんので妄想で回答します。

文字化けというのがprintの出力の話であって、\U30c6\U30e9\U30c6\U30a4\U30ebという感じ(Unicodeスカラ値)なのであれば気にすることはありません。
例えば、要素を取り出して単体でprintすればちゃんと表示されるはずです。

こんな感じ?

swift

1print(response.result.value!["title"])

#追記

これでいけるかも。

swift

1print(response.result.value! as Dictionary)

#さらに追記

動作確認してみました。
response.result.value!はNSDictionaryかと思っていたのですがNSDataのようなので、

swift

1print(NSString(data:response.result.value!, encoding:NSUTF8StringEncoding))

これでどうでしょうか?(試したAlamofireは3.1.0です)

投稿2016/02/24 14:01

編集2016/02/25 00:24
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ziko8jp

2016/02/25 00:58

ありがとうございます! 出来ました。予定通りの動きとなりました。 かなり感動しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問