2011-11-04 86 views
5

使用本機「http」模塊的HTTP請求的響應正文,顯示unicode字符的問號字符,而不是其實際值。這是我正在運行的代碼的基本代碼片段。Node.js與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')); 

但我得到了相同的結果。

有什麼想法?

+1

什麼是您的操作系統? –

+2

嘗試檢查'chunk.charCodeAt(chunk.length - 1)'。如果它是'224'('à'),問題出在你的控制檯/區域設置上。 – katspaugh

+0

@PabloFernandez,使用Mac OS X雪豹 –

回答

5

原因可能是,如果我們不指定「googleKnownAsUTF8OK」關於請求頭用戶代理,谷歌將響應一個HTML文檔的內容類型ISO-8859-1(老瀏覽器,機器人?我不知道),所以通過「二進制」解碼響應緩衝區是正確的。但是,如果我們通過utf8解碼ISO-8859-1編碼的緩衝區,那麼字節0xe0(à)意味着「在一行中形成一個3字節的字符」,在我們的例子中它是一個畸形字符,所以顯示了一些意外字符(取決於環境)。

我們可以嘗試「Mozilla/5.0」作爲用戶代理的值。祝你好運。