Javascript 请求返回unicode替换字符

Javascript 请求返回unicode替换字符,javascript,node.js,request,Javascript,Node.js,Request,使用该模块加载网页时,我注意到,对于英国镑符号我有时会返回unicode替换字符\uFFFD 我正在解析的一个示例URL是Amazon UK页面: 我还使用模块使用响应头中返回的字符集进行解码: request(urlEntry.url, function(err, response, html) { const contType = response.headers['content-type']; const charset = contType.substring(cont

使用该模块加载网页时,我注意到,对于英国镑符号
我有时会返回unicode替换字符
\uFFFD

我正在解析的一个示例URL是Amazon UK页面:

我还使用模块使用响应头中返回的字符集进行解码:

request(urlEntry.url, function(err, response, html) {
    const contType = response.headers['content-type'];
    const charset = contType.substring(contType.indexOf('charset=') + 8, contType.length);

    const encBody = iconv.decode(html, charset);
...
但这似乎没有什么帮助。我还尝试将响应HTML解码为
UTF-8


如何避免这种Unicode替换字符?

首先,Amazon网页是用ISO-8859-1编码的,而不是UTF-8编码的。这就是导致Unicode替换字符的原因。您可以在响应标题中对此进行检查。我使用了
curl-I

第二,请求自述文件说:

encoding—用于响应数据的setEncoding的编码。如果 null,则主体作为缓冲区返回。还有什么(包括 默认值(未定义)将作为编码参数传递 to toString()(表示默认情况下这实际上是utf8)

默认情况下它是UTF-8。。。而且(经过一点实验后)我们发现它不幸地不支持ISO-8859-1。但是,如果我们将编码设置为null,那么我们就可以使用iconv lite对生成的缓冲区进行解码

这是一个示例程序

var request = require('request');
var iconvlite = require('iconv-lite');

var url = "http://www.amazon.co.uk/gp/product/B00R3P1NSI/ref=s9_newr_gw_d38_g351_i2?pf_rd_m=A3P5ROKL5A1OLE&pf_rd_s=center-2&pf_rd_r=0Q529EEEZWKPCVQBRHT9&pf_rd_t=101&pf_rd_p=455333147&pf_rd_i=468294";

request({url: url, encoding: null}, function (error, response, body) {
   if (!error && response.statusCode == 200) {
       var encoding = 'ISO-8859-1';
       var content = iconvlite.decode(body, encoding);
       console.log(content);
   }

});
这个问题有点相关,我用它来解决这个问题:

谢谢,科林。你的回答和我目前所做的结合起来,让一切都按照我的意愿运转。干杯