尝试从API获取数据时获取问号

时间:2014-07-19 12:11:00

标签: javascript json node.js

我正在使用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" : []
}

非常感谢!

2 个答案:

答案 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。当浏览器看到这些破碎的字符串进来时,它们会立即出现   放弃中间连接,显然是作为一种安全措施。 (一世   理解这一点,但很难解释它,   因为这些字符编码讨论给我带来了麻烦。)