我按如下方式解析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”, “错误”:假,...
我该如何解决这个问题?
感谢。
答案 0 :(得分:0)
问题是您加载的页面未以UTF-8编码。找出它使用的编码,并在您的应用中使用该编码(或将其转换为UTF-8)。
答案 1 :(得分:0)
我无法想到会产生此输出的任何编码问题。
但是,这可能旨在解决某些特定(较旧)浏览器版本中的安全漏洞。有些浏览器允许您为通用Object
和Array
类型定义setter / getters - 这意味着如果您将JSON文件包含为JavaScript脚本:
...然后调用setter / getters,你可以提取数据 - 违反了跨源策略。
最新的浏览器不会出现此问题,但有些网站仍然通过在其JSON数据前加上已知字符串(以破坏JavaScript评估)来防止这种情况发生。
如果是这种情况,那么应该在其API文档中明确记录。
(链接:relevant Mozilla bug)
答案 2 :(得分:0)
您似乎试图直接从HTTP网址读取。不幸的是,除非您想编写自定义HTTP客户端解析器,否则会导致问题。我的建议是使用专门设计用于从HTTP URL读取的第三方库。由于编码是HTTP响应的一部分,因此它将为您正确解码来自服务器的响应。