웹 서버에서 텍스트를로드하기 위해 node.js를 사용하여 HTTP 요청을 만들고 싶습니다. 응답에는 많은 텍스트 (일부 메가 바이트)가 포함될 수 있으므로 각 텍스트 청크를 개별적으로 처리하고 싶습니다. 다음 코드를 사용하여이를 달성 할 수 있습니다.
var req = http.request(reqOptions, function(res) {
...
res.setEncoding('utf8');
res.on('data', function(textChunk) {
// process utf8 text chunk
});
});
이것은 문제없이 작동하는 것 같습니다. 그러나 HTTP 압축을 지원하고 싶으므로 zlib을 사용합니다.
var zip = zlib.createUnzip();
// NO res.setEncoding('utf8') here since we need the raw bytes for zlib
res.on('data', function(chunk) {
// do something like checking the number of bytes downloaded
zip.write(chunk); // give the raw bytes to zlib, s.b.
});
zip.on('data', function(chunk) {
// convert chunk to utf8 text:
var textChunk = chunk.toString('utf8');
// process utf8 text chunk
});
이 같은 멀티 바이트 문자에 대한 문제가 될 수 '\u00c4'2 바이트로 구성되는 : 0xC3와 0x84. 첫 번째 바이트가 첫 번째 청크 ( Buffer) 로 덮여 있고 두 번째 바이트가 두 번째 청크로 덮여 있으면 chunk.toString('utf8')텍스트 청크의 끝 / 시작에서 잘못된 문자가 생성됩니다. 어떻게 피할 수 있습니까?
힌트 : 다운로드 한 바이트 수를 제한하려면 여전히 버퍼 (특히 버퍼의 바이트 수)가 필요합니다. 따라서 res.setEncoding('utf8')압축되지 않은 데이터에 위의 첫 번째 예제 코드에서와 같이 사용 하는 것이 내 요구에 맞지 않습니다.