Node.js与HTTP响应正文unicode问题

使用本机“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')); 

但是我得到了同样的结果。

任何想法?

原因可能是,如果我们没有在请求标题中指定“googleKnownAsUTF8OK”用户代理,Google会响应一个内容types为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