一尘不染

Node.JS刮擦编码?

node.js

我取这个页面该请求库中的Node.js,并使用解析身体cheerio

调用$.html()已解析的响应正文,发现该页面的title属性为:

<title>Le Relais de l'Entrec?te</title>

…什么时候应该:

<title>Le Relais de l'Entrecôte</title>

我尝试将请求库的选项设置为include encoding: 'utf8',但这似乎并没有改变任何东西。

如何保留这些字符?


阅读 250

收藏
2020-07-07

共1个答案

一尘不染

该页面似乎是用iso-8859-1编码的。您需要request通过传递encoding: null并使用诸如node-
iconv之
类的东西来告诉您退回未编码的缓冲区。

如果要编写通用搜寻器,则必须弄清楚如何检测遇到的每个页面的编码以正确对其进行解码,否则以下情况应适用于您的情况:

var request = require('request');                                               
var iconv = require('iconv');

request.get({                                                                   
  url: 'http://www.relaisentrecote.fr',                                         
  encoding: null,                                                               
}, function(err, res, body) {                                                   
  var ic = new iconv.Iconv('iso-8859-1', 'utf-8');                              
  var buf = ic.convert(body);                                                   
  var utf8String = buf.toString('utf-8');  
  // .. do something with utf8String ..                                                                             
});
2020-07-07