我正在尝试通过请求获得正确的编码。
request.get({
"uri":'http://www.bold.dk/tv/',
"encoding": "text/html;charset='charset=utf-8'"
},
function(err, resp, body){
console.log(body);
}
);
无论我做什么,丹麦字符的编码都不正确。
有什么想法吗?
您可以使用 iconv (lite) 来转换它。您还需要通过将 encoding 属性设置为 null 来告诉 request 不要主动将编码设置为 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'
如果是这样,您有两种方法可以解决此问题:
使用以下代码解压缩数据:
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;
}
});
我有同样的问题,使用request v2.88.0
.
参考woolfi makkinan的回答,我得到了解决问题的简单方法。
request.get({
"uri": 'http://www.bold.dk/tv/',
"encoding": "text/html;charset='charset=utf-8'",
"gzip": true // notice this config
},
function(err, resp, body){
console.log(body);
}
);
添加gzip: true
到request
选项,request
将处理gzip,然后blob可以正确转换为字符串。</p>