JSON中的额外字符

时间:2013-11-19 17:08:19

标签: java json

我按如下方式解析JSON:

URL urlData = new URL("http://example.com/file.php");
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                urlData.openConnection().getInputStream(), "UTF-8"));
        String showtimes = reader.readLine();
        System.out.println(showtimes);

但是在字符串的开头插入?

  ?

{ “日期”: “19”, “错误”:假​​,...

据我了解,出现此问题是因为编码。如果我删除“UTF-8”,字符串看起来像:

  

п»ї{ “日期”: “19”, “错误”:假​​,...

我该如何解决这个问题?

感谢。

3 个答案:

答案 0 :(得分:0)

问题是您加载的页面未以UTF-8编码。找出它使用的编码,并在您的应用中使用该编码(或将其转换为UTF-8)。

答案 1 :(得分:0)

我无法想到会产生此输出的任何编码问题。

但是,这可能旨在解决某些特定(较旧)浏览器版本中的安全漏洞。有些浏览器允许您为通用ObjectArray类型定义setter / getters - 这意味着如果您将JSON文件包含为JavaScript脚本:

...然后调用setter / getters,你可以提取数据 - 违反了跨源策略。

最新的浏览器不会出现此问题,但有些网站仍然通过在其JSON数据前加上已知字符串(以破坏JavaScript评估)来防止这种情况发生。

如果是这种情况,那么应该在其API文档中明确记录。

(链接:relevant Mozilla bug

答案 2 :(得分:0)

您似乎试图直接从HTTP网址读取。不幸的是,除非您想编写自定义HTTP客户端解析器,否则会导致问题。我的建议是使用专门设计用于从HTTP URL读取的第三方库。由于编码是HTTP响应的一部分,因此它将为您正确解码来自服务器的响应。

http://hc.apache.org/httpcomponents-client-ga/