サーバーからJSONで送られてきた文字列をAndroidで表示する処理を作っているのですが、正しく表示できません。
Java
1String _tmp_string = data.getString("name"); 2String _tmp_string_2 = ""; 3 4for (int j = 0; j <= _tmp_string.length() - 5; j=j+5) { 5 _tmp_string_2 += "\" + _tmp_string.substring(j, j+5); 6} 7 8Log.d("MyProj", "_tmp_string_2 = " + _tmp_string_2); 9byte[] _byte_name = _tmp_string_2.getBytes("UTF-8"); 10Log.d("MyProj", "_byte_name = " + _byte_name); 11 12// byte[] _byte_name = "\u4ec1\u53cb\u4f1a".getBytes("UTF-8"); 13 14// Log.d("MyProj", "_byte_name = " + _byte_name); 15 16String _tmp_name = new String(_byte_name, "UTF-8"); 17Log.d("MyProj", "_tmp_name = " + _tmp_name); 18 19PaymentList item = new PaymentList(bmp, _tmp_date, _tmp_name, data.getString("price") + "円"); 20listItems.add(item); 21
表示結果は、\u4ec1\u53cb\u4f1aとなってしまいます。
今コメントにしている、
Java
1byte[] _byte_name = "\u4ec1\u53cb\u4f1a".getBytes("UTF-8");
に置き換えると正しく日本語が表示できている状態です。
Logcat
1_tmp_string_2 = \u4ec1\u53cb\u4f1a
と変換できているので何が原因なのかわかりません。
どこが間違っているのかご指摘いただけると幸いです。
よろしくお願いします。
「表示結果は、\u4ec1\u53cb\u4f1aとなってしまいます。」というのはどの変数を表示した結果なのでしょうか?
説明が不足していてすみませんでした。_tmp_nameになります。この変数をListView上のTextViewに表示したときに崩れます。
_tmp_string を表示するとどうなるのでしょうか?
_tmp_stringを表示すると、u4ec1u53cbu4f1aとなります。
2文字目の1バイト目からしてSJISかしら?
UTF-16で"4ec1"は仁、"53cb"は友、"4f1a"は会なので、UTF-16になっていると思います。同じjsonをiOS(Swift)ではなんの加工も必要なく正しく表示できています。
回答2件
あなたの回答
tips
プレビュー