我正在使用node-webkit构建一个应用程序,每当我的国家发生警报时(我们目前处于战争中)都会提醒我。有一个网站提供JSON文件,其中包含有关当前警报的信息。
当我尝试访问该页面并检查是否有警报时,结果会出现很多问号。我无法使用它,当我尝试JSON.parse数据时,它说它无法解析问号。我该怎么办?
url: "http://www.oref.org.il/WarningMessages/alerts.json",
checkAlert: function(callback) {
request({
uri: this.url,
json: true,
encoding: 'utf-8'
}, function(err, res, json) {
if (err)
return console.log(err);
json = JSON.parse(json);
var data = json.data;
console.log('just checked. json.data: ' + data);
if (data.length != 0) // if array is not empty
callback(true);
else
callback(false);
});
}
以下是文件的外观:
{
"id" : "1405751634717",
"title" : "something in hebrew ",
"data" : []
}
非常感谢!
答案 0 :(得分:1)
该API会返回User
中编码的JSON响应,因此您必须告诉/Main
使用该编码。
但是,由于您正在尝试查询Pikud Haoref的警报API,请在npm上查看UTF-16-LE
以便为您完成繁重的工作:
https://www.npmjs.com/package/pikud-haoref-api
(免责声明:我创建了这个包)
答案 1 :(得分:0)
看看这里:jQuery doesn't display Hebrew
首先要确保您的JSON文件实际上是以UTF-8
进行的您可能想要检查服务器如何提供这些JSON以及它们具有哪些编码。
同时检查此链接:http://dougal.gunters.org/blog/2012/03/14/dealing-with-utf-in-node-js/
快速概述:
“V8目前只接受BMP中的字符作为输入,使用UCS-2 作为内部表示(与JavaScript相同的表示形式) 字符串)。“基本上,这意味着JavaScript使用UCS-2 内部字符编码,严格来说是16位格式, 这反过来意味着它只能支持前65,536 Unicode字符的代码点。任何落在外面的角色 在从UTF-8到UTF-8的转换中,该范围显然被截断 UCS-2,修改字符流。就我而言(和许多其他人一样) 我在研究中发现了这个系统试图的表面 将这些字符串序列化/反序列化为JSON对象。在里面 转换,你可以得到无效的字符序列 UTF-8。当浏览器看到这些破碎的字符串进来时,它们会立即出现 放弃中间连接,显然是作为一种安全措施。 (一世 理解这一点,但很难解释它, 因为这些字符编码讨论给我带来了麻烦。)