0

我正在调用一个返回JSON响应的 API。在阅读JSON响应时,有些地方的数据有一些特殊字符。我想在读取对象中的响应时排除这些特殊字符。JSON响应如下所示:

{"data":[{"title":"PSY - GANGNAM STYLE (\uac15\ub0a8\uc2a4\ud0c0\uc77c) M\/V","content":All rights reserved."}]} 

Java代码是这样的:

BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "ISO-8859-1"), 8);

当我从响应中读取标题键时,它也给了我这些我不想要的特殊字符。如何摆脱那些?我需要指定其他编码吗?

数据源:http ://pipes.yahoo.com/pipes/pipe.run?_id=920adeb2e95c15877e29dc678aa78dd7&_render=json&n=1

4

1 回答 1

0

这不是编码问题(如 UTF-8),而是 JavaScript 语法问题。例如, “ \uac15”是表示 Unicode 字符 U+AC15 的 JavaScript 语法,即“강”。这些转义字符一起是用韩文(韩语)写成的歌曲的名称:“강남스타일”。

您的 Java 字符串包含反斜杠转义序列是正常且可以的。当您通过 JSON 阅读器运行该字符串时,您应该得到一个包含实际韩文字符的 JSON 对象。


为了回应您关于从 JSON 阅读器获得错误输出的评论,这取决于您使用的 JSON 库(以及您如何使用它),您没有在问题中指定。这是一个使用Jackson 2.1.0对我有用的示例:

public final class JsonTest {
    public static void main(final String[] args) {
        final String json = "\"PSY - GANGNAM STYLE (\\uac15\\ub0a8\\uc2a4\\ud0c0\\uc77c) M\\/V\"";
        System.out.println("JSON: " + json);

        try {
            // ObjectMapper is from Jackson 2.1 databind library.
            final ObjectMapper mapper = new ObjectMapper();
            final String decoded = mapper.readValue(json, String.class);
            System.out.println("Decoded: " + decoded);
        }
        catch (final IOException e) {
            e.printStackTrace();
        }
    }
}
于 2012-11-11T14:35:58.310 回答