如何在android中读取json响应时修复编码?

时间:2012-11-11 11:11:03

标签: java android encoding character-encoding

我正在调用一个返回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

1 个答案:

答案 0 :(得分:0)

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

您的Java字符串包含反斜杠转义序列是正常的。当您通过JSON阅读器运行该字符串时,您应该获得一个包含实际Hangul字符的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();
        }
    }
}