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

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

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

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1899閲覧

Swift4でutf8スカラ値から日本語を表示したい

TakamasaIijima

総合スコア16

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/08/28 00:01

前提・実現したいこと

Swift4でiosアプリを作っています.現在REST APIをGETしてレスポンスを画面に表示したいのです.
GETでの取得まではできたのですが,/u2949 のようなスカラ値になってしまっています.
この値から日本語に戻す方法を知りたいです.

現在の出力

"\u90e8\u5ba4\u306f\u958b\u3044\u3066\u308b\u3088\uff01"

期待する出力

"部室は開いてるよ!"

該当のソースコード

swift

1 2 var body = "" 3 let url = URL(string: "XXXX.com/dev") 4 let request = URLRequest(url: url!) 5 let session = URLSession.shared 6 session.dataTask(with: request) { (data, response, error) in 7 if error == nil, let data = data, let response = response as? HTTPURLResponse { 8 // HTTPヘッダの取得 9 print("Content-Type: (response.allHeaderFields["Content-Type"] ?? "")") 10 // HTTPステータスコード 11 print("statusCode: (response.statusCode)") 12 body = String(data:data, encoding: String.Encoding.utf8) ?? "" 13 print(String(data: data, encoding: String.Encoding.utf8) ?? "") 14 //labelにレスポンスのdataを表示したい 15 self.KeyStatus.text = String(body.utf8) 16 } 17 }.resume() 18

試したこと

.utf8をつけて変換を試しましたがダメでした.

補足情報(FW/ツールのバージョンなど)

Xcode9 Swift

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

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

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

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

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

fuzzball

2018/08/28 00:14

print(data.map {String(format: "%02x", $0)}.joined(separator: "")) の出力を教えて下さい。
TakamasaIijima

2018/08/28 00:19

7b22737461747573436f6465223a203230302c2022626f6479223a20225c75393065385c75356261345c75333036665c75393538625c75333034345c75333036365c75333038625c75333038385c7566663031227d
TakamasaIijima

2018/08/28 00:19

です.よろしくお願いいたします.
fuzzball

2018/08/28 00:22

サーバから "\u90e8" の形で送られてきているので、サーバ側で対応しないといけないのではないでしょうか?(この辺よく知らないので)それとも、サーバ側は変えられないので、こっち側で対応しないといけないということでしょうか?
TakamasaIijima

2018/08/28 00:26

fuzzball様 ありがとうございます。サーバー側はAWS LAMBDAのpythonなのですが、そちらのコンソールですと日本語で表示されます。
fuzzball

2018/08/28 00:37

pythonは \uxxxx ですが、Swiftは \u{xxxx} なのです。
TakamasaIijima

2018/08/28 00:38

!!!なるほど!!!すぐやってみます!!
fuzzball

2018/08/28 00:52

あ、すみません。これJSONで受け取ってるのにJSONとして扱ってないのでは?
guest

回答1

0

ベストアンサー

swift

1if let jsonObject = (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)) as? [String:Any] { 2 print(type(of: jsonObject), jsonObject) 3 jsonObject.forEach { 4 print("($0.key) = ($0.value)") 5 } 6} 7//=> Dictionary<String, Any> ["body": 部室は開いてるよ!, "statusCode": 200] 8//=> body = 部室は開いてるよ! 9//=> statusCode = 200

今どきはCodable使うので、もっと複雑なJSONを扱うならググって対応すると幸せになれるかもしれません。

投稿2018/08/28 01:06

編集2018/08/28 01:08
fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問