2011-11-04 16 views
5

ネイティブ 'http'モジュールを使用するHTTPリクエストの応答本体は、実際の値ではなくユニコード文字の疑問符文字を表示します。ここでは、実行しているコードの基本的な断片です。Node.js HTTP応答本体のユニコード問題

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

お使いのOSは? –

+2

'chunk.charCodeAt(chunk.length - 1)'を調べてみてください。それが '224'('à')の場合は、コンソール/ロケールに問題があります。 – katspaugh

+0

@PabloFernandez、Mac OS X Snow Leopardを使って –

答えて

5

理由、つまり私たちは、リクエストヘッダの「googleKnownAsUTF8OK」ユーザーエージェントを指定しない場合は、Googleのだろう応答古いためにISO-8859-1のコンテンツタイプを持つHTMLドキュメント(ブラウザ、ボット?私は知らない)ので、 "バイナリ"で応答バッファを解読するのは正しいです。

しかし、ISO-8859-1でエンコードされたバッファをutf8でデコードすると、0xe0(à)バイトは「行内に3バイトずつ文字を形成する」ことを意味します。予想外の文字がいくつか表示されました(環境によって異なります)。

user-agentの値として「Mozilla/5.0」を試してみることがあります。がんばろう。

関連する問題