6

过去几天我一直在搜索这个,但我认为我找不到正确的指针。如果发现重复,请将其与适当的问题合并。

我对使用 JSON 非常陌生,作为我的一个项目的一部分,我需要解码 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,如果您在其中运行它)或 System.out 在您的环境中使用的编码的字符编码中表示。

文件不能包含 Unicode 字符。文件是字节流,但 Unicode字符的大小是多个字节(通常是两个)。这是字符编码变得相关的地方。Unicode 字符必须转换为字节序列才能将它们写入文件(包括 System.out)。Unicode 字符最常用的编码之一是 UTF-8。软件程序员的诀窍是在字节和字符之间转换时始终使用正确的字符编码。在一个地方缺少正确的编码,例如在调试 println() 调用中,将给出错误和误导性的输出。

于 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 回答