我正在使用 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。
难道我做错了什么?