2011-11-04 3 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"사용자 에이전트를 지정하지 않을 경우, 구글 것이라고 응답 옛 대한 ISO-8859-1의 콘텐츠 형식과 HTML의 문서 (브라우저, 봇? 나도 몰라), 그래서 "바이너리"로 응답 버퍼를 디코딩 올바른지.

그러나 ISO-8859-1로 인코딩 된 버퍼를 utf8로 디코딩하면 0xe0 (à) 바이트는 "행에 3 바이트 씩 문자를 형성합니다"를 의미합니다.이 경우에는 조작 된 문자이므로 예기치 않은 문자 (환경에 따라 다름)가 표시되었습니다.

user-agent의 값으로 "Mozilla/5.0"을 시도 할 수 있습니다. 행운을 빕니다.