6

私は過去数日間これについて探していましたが、正しいポインタを見つけることができないと思います。重複していることが判明した場合は、適切な質問とマージしてください。

私はJSONの操作にかなり慣れていないので、プロジェクトの1つとして、JSONファイルをデコードしてさらに処理する必要があります。ただし、Json-simpleライブラリを使用してデコードしようとすると、実際の文字ではなく、解析されたオブジェクトに奇妙な疑問符が表示されます。サンプルコードを以下に示します。

String str = "{\"alias\": [\"Evr\u00f3pa\", \"\u05d0\u05d9\u05e8\u05d5\u05e4\"]}";
JSONParser parser = new JSONParser(); 
JSONObject jsonObject = (JSONObject)parser.parse(str);

System.out.println(jsonObject) gives {"alias":["Evrópa","?????"]}

Json-libも使ってみたところ、同じ結果になりました。

助けてくれてありがとう。

4

2 に答える 2

8

問題は JSON にあるのではなく、System.out.println() にあります。これらの文字は、端末 (または IDE で実行した場合は IDE) の文字エンコーディングでも、環境内の System.out で使用されているエンコーディングの文字エンコーディングでも表すことができません。

ファイルに Unicode 文字を含めることはできません。ファイルはバイトのストリームですが、Unicode文字のサイズは複数バイト (通常は 2 バイト) です。ここで、文字エンコーディングが重要になります。Unicode 文字をファイル (System.out を含む) に書き込むには、バイト シーケンスに変換する必要があります。Unicode 文字で最も一般的に使用されるエンコーディングの 1 つは UTF-8 です。ソフトウェア プログラマーの秘訣は、バイトと文字を変換するときに常に正しい文字エンコードを使用することです。たとえば、デバッグの println() 呼び出しで、1 つの場所で正しいエンコーディングが欠けていると、誤った、誤解を招くような出力が得られます。

于 2012-08-08T16:24:28.850 に答える
0

特殊文字のグループをサポートしていないデフォルトの文字セットを使用している可能性があります。次の行に沿って、文字セットとして UTF-8 を使用してみてください。

String str = "{\"alias\": [\"Evr\u00f3pa\", \"\u05d0\u05d9\u05e8\u05d5\u05e4\"]}";
InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(str.getBytes(Charset.forName("UTF-8"))), Charset.forName("UTF-8"));
JSONParser parser = new JSONParser(); 
JSONObject jsonObject = (JSONObject)parser.parse(isr);
于 2012-08-08T16:16:26.940 に答える