我正在使用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的原因。
我做错了吗?
答案 0 :(得分:0)
我已经确定数据来自这样的Instagram,除了尝试转义或删除非utf-8字符外,没有太多可以做的事情。由于只有某些字段是这样的,我的应用程序不需要这些字段,所以我可以解决它。