我正在调用一个返回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
答案 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();
}
}
}