nodejs使用请求进行编码

我试图得到正确的编码请求。

request.get({ "uri":'http://www.bold.dk/tv/', "encoding": "text/html;charset='charset=utf-8'" }, function(err, resp, body){ console.log(body); } ); 

不pipe我做什么,丹麦字符的编码都是不对的。

有什么想法吗?

你可以使用iconv(lite)来转换它。 您还需要通过将encoding属性设置为null来通知请求不要主动将编码设置为UTF-8的默认值。 所以你应该这样做:

 var iconv = require('iconv-lite'); request.get({ uri:'http://www.bold.dk/tv/', encoding: null }, function(err, resp, body){ var bodyWithCorrectEncoding = iconv.decode(body, 'iso-8859-1'); console.log(bodyWithCorrectEncoding); } ); 

也许你的麻烦是在'Accept-Encoding'头。 假设您有'Accept-Encoding': 'gzip,deflate'这样'Accept-Encoding': 'gzip,deflate'标题'Accept-Encoding': 'gzip,deflate'

如果是这样,你有2种方法来解决这个问题:

  1. 删除此标题
  2. 使用下面的代码来解压缩数据:

     const req = request(options, res => { let buffers = [] let bufferLength = 0 let strings = [] const getData = chunk => { if (!Buffer.isBuffer(chunk)) { strings.push(chunk) } else if (chunk.length) { bufferLength += chunk.length buffers.push(chunk) } } const endData = () => { let response = {code: 200, body: ''} if (bufferLength) { response.body = Buffer.concat(buffers, bufferLength) if (options.encoding !== null) { response.body = response.body.toString(options.encoding) } buffers = [] bufferLength = 0 } else if (strings.length) { if (options.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') { strings[0] = strings[0].substring(1) } response.body = strings.join('') } console.log('response', response) }; switch (res.headers['content-encoding']) { // or, just use zlib.createUnzip() to handle both cases case 'gzip': res.pipe(zlib.createGunzip()) .on('data', getData) .on('end', endData) break; case 'deflate': res.pipe(zlib.createInflate()) .on('data', getData) .on('end', endData) break; default: res.pipe(zlib.createInflate()) .on('data', getData) .on('end', endData) break; } });