【发布时间】:2012-09-20 20:41:11
【问题描述】:
我正在使用 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));
当我启动节点服务器并将浏览器指向我的 url 时,我从 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。
我做错了吗?
【问题讨论】:
-
您可能需要在请求中设置接受类型。
-
感谢您的提示,但已经设置了 'Accept' : 'application/json' 和 'Accept-Charset' : 'utf-8'
标签: javascript node.js instagram