🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

UTF-8

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2846閲覧

Unity jsonデータ UnicodeからUTF-8へ

kuma_5

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

UTF-8

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/02/03 19:09

現在Unityでアプリを開発しており、アプリからwebサーバへアクセスしwebサーバのsqliteデータベースの内容をunityのアプリの内のsqliteデータベースへ書き込もうとしています。

リンク内容
こちらの質問者さんのコードを参照してデータベースからデータを受け取っています。
現状の問題としてunityからphpを経由して、sqliteデータベースの内容を取得しているのですが、データベースから受け取ったデータの日本語がUnicodeのまま出力されています。
jsonで受け取っているため、Unicodeになっているのは理解できるのですが、どのようにすれば、UnicodeからUTF-8へ変換し、日本語へと戻せるのでしょうか。

C#

1IEnumerator get() 2 { 3 WWW www = new WWW("http://~/postdata.php"); 4 yield return www; 5 if (!string.IsNullOrEmpty(www.error)) 6 { 7 Debug.LogError(string.Format("Fail Whale!\n{0}", www.error)); 8 yield break; 9 } 10 string json = www.text; 11 IList List = (IList)Json.Deserialize(json); 12 foreach (IDictionary list in List) 13 { 14 string id = (string)list["id"]; 15 string sub = (string)list["sub"]; 16 string title = (string)list["title"];//ここのデータを日本語にしたい 17 18 var item = GameObject.Instantiate(prefab) as RectTransform; 19 item.SetParent(transform, false); 20 21 var text = item.GetComponentInChildren<Text>(); 22 text.text = "idについて " + id.ToString() + "subについて " + item_id.ToString()+"タイトルについて " + title.ToString() ; 23 }

jsonについてなど深く理解できていない点が多々あるとは思いますが、どこにどのような処理をいれればよいか教えていただけると助かります。
わかりずらい文章で申し訳ありませんが、何卒よろしくお願い致します。

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

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

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

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

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

hoshi-takanori

2021/02/03 19:15

「Unicodeのまま出力されています」というのは、具体的にどのように出力されるのでしょうか?
kuma_5

2021/02/03 19:30 編集

unityのコンソールのデバックログに "id":"10","sub":"20210204","title":"\u5730\u9707\u60c5\u5831"などという感じで出力されています。 ここのtitleの部分を日本語にしたいです
退会済みユーザー

退会済みユーザー

2021/02/03 20:18 編集

それは Unicode Escape Sequence という形にエスケープされていて、デシリアライズすれば元の日本語になると思います。 デシリアライズの結果はそうなってませんか? デシリアライザには何を使ってますか?
hoshi-takanori

2021/02/03 20:23

というか、Debug.LogError がそう表示してるだけだと思います。 text.text = 〜 の結果はちゃんと表示されてるのでは?
退会済みユーザー

退会済みユーザー

2021/02/03 22:46

デシリアライズに使っているのは MINIJson ですか? コードは期待どおり動いてますか?
kuma_5

2021/02/04 01:47

MINIJsonを使用しております。 また、お二方がおっしゃっている通り、デバックログでこうなっているだけで、text.textは正常に日本語として結果が表示されていました。 こちらの理解不足でご迷惑をおかけして申し訳ないです。 お二方とも本当にありがとうございます。
guest

回答1

0

ベストアンサー

質問に対するコメント、

デシリアライズの結果はそうなってませんか? デシリアライザには何を使ってますか?
デシリアライズに使っているのは MINIJson ですか? コードは期待どおり動いてますか?

に返事がありませんが・・・

まず、"\u5730\u9707\u60c5\u5831" ですが、質問のコメントに述べた通り、Unicode Escape Sequence という形にエスケープされているのです。元の文字列は "地震情報" のはず。デシリアライズすれば元の日本語の文字列になると思います。

デシリアライザが何なのか不明ですが、Unity の定番(?)とかいう話の MiniJSON だとすると質問のコードではコンパイルエラーになります。

なので、MiniJSON ではないのかもしれませんが、とりあえず MiniJSON と Newtonsoft.Json を使って以下のコードのようにデシリアライズすると、

string jsonStr = "{\"id\":\"10\",\"sub\":\"20210204\",\"title\":\"\u5730\u9707\u60c5\u5831\"}"; Console.WriteLine("------MiniJSON----------------------------"); var list = Json.Deserialize(jsonStr) as Dictionary<string, object>; foreach (var kvp in list) { Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value); } Console.WriteLine("------Newtonsoft.Json---------------------"); var list2 = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonStr); foreach (var kvp in list2) { Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value); }

結果は以下の通りとなります。

------MiniJSON---------------------------- Key = id, Value = 10 Key = sub, Value = 20210204 Key = title, Value = 地震情報 ------Newtonsoft.Json--------------------- Key = id, Value = 10 Key = sub, Value = 20210204 Key = title, Value = 地震情報

投稿2021/02/04 00:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問