Node.js& instagram API,'无法将文本框架解码为UTF-8'

时间:2012-09-20 20:41:11

标签: javascript node.js instagram

我正在使用http node.js模块进行简单的instagram API调用。只是这样一个简单的请求:

getJSON : function(options, on_result, on_error) {

    var req = http.request(options, function(res) {

        var output = '';
        res.setEncoding('utf8');

        res.on('data', function (chunk) {
            console.log(chunk);
            return output += chunk;
        });

        return res.on('end', function() {
            var obj = JSON.parse(output);
            on_result(res.statusCode, obj);
        });
    });

    req.on('error', function(err) {
        on_error(err);
    });

    return req.end();
}

on_result函数只是用JSON.stringify对其进行字符串化,并使用此函数通过Web套接字发送它:

var connection = request.accept(null, request.origin);
connection.sendUTF(JSON.stringify(obj));

当我启动节点服务器并将浏览器指向我的网址时,我从chrome和firefox获取此信息:

  

无法将文本框架解码为UTF-8。

昨天我完全没有问题。

在http'on data'函数中,我将数据注销到控制台,我在屏幕上看到的内容看起来没问题,除了像这样的某些转义字符:

"text":"\ud83d\ude1d\ud83d\ude02\ud83d\udc4f\ud83d\udc8b"
"full_name":"\ud83c\uddee\ud83c\uddf9\u21e8\u261eSara\u261c\u21e6\ud83c\uddee\ud83c\uddf9"

然后,当它被JSON字符串化时,这些转义序列变为:

"text":"<d83d><de1d><d83d><de02><d83d><dc4f><d83d><dc8b>"
"full_name":"<d83c><ddee><d83c><ddf9>â¨âSaraââ¦<d83c><ddee><d83c><ddf9>"

这解释了浏览器抱怨UTF-8的原因。

我做错了吗?

1 个答案:

答案 0 :(得分:0)

我已经确定数据来自这样的Instagram,除了尝试转义或删除非utf-8字符外,没有太多可以做的事情。由于只有某些字段是这样的,我的应用程序不需要这些字段,所以我可以解决它。