[英]Node.js unicode issue with HTTP response body
HTTP请求的响应主体使用本机“http”模块,显示unicode字符的问号字符,而不是实际值。 这是我正在运行的基本代码片段。
var http = require('http');
var google = http.createClient(80, 'www.google.it');
var request = google.request('GET', '/',
{
'host': 'www.google.it',
}
);
request.end();
request.on('response', function (response) {
response.setEncoding('utf8');
response.on('data', function (chunk) {
console.log(chunk);
});
});
在回复中,有一个以“ Pubblicit ”开头的特定单词。 它的最后一封信是一个奇怪的角色,向我展示了一个问号。 这个词应该是Pubblicità ,而是显示为Pubblicit? 。
我也尝试使用.toString()
输出数据:
console.log(chunk.toString());
要么
console.log(chunk.toString('utf8'));
但我得到的结果相同。
任何的想法?
我设置了response.setEncoding('binary');
它的工作原理。 不知道为什么。
参考: http : //groups.google.com/group/nodejs/browse_thread/thread/3bd3935b1f42a5f4?pli = 1
原因可能是,如果我们没有在请求标题上指定“googleKnownAsUTF8OK”用户代理,谷歌会响应内容类型为ISO-8859-1的html文档(对于旧浏览器,机器人?我不知道),所以解码“二进制”的响应缓冲区是正确的。
但是,如果我们通过utf8解码ISO-8859-1中编码的缓冲区,那么字节0xe0(à)意味着“连续形成一个3字节的字符”,在我们的例子中它是一个格式错误的字符,所以一些意想不到的字符(显示取决于环境)。
我们可以尝试“Mozilla / 5.0”作为用户代理的价值。 祝好运。
我设置了response.setEncoding('binary'); 它的工作原理。 不知道为什么。
参考: http : //groups.google.com/group/nodejs/browse_thread/thread/3bd3935b1f42a5f4?pli = 1
在我的情况下,由于旧网页的windows-1252字符集,我有一些错误的字符。
我只是在请求选项中使用了encode:'binary'而且它工作正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.