问题描述
在http://www.gpsspg.com/maps.ht...
但是使用Node.js获取到的返回值结果如下
let url ='https://apis.map.qq.com/jsapi?qt=poi&wd='+encodeURI(name);
return await new Promise((resolve,reject)=>{
request({url:url,json:true,headers:{'charset':'utf8','Content-Encoding':'identify'}}, function (error, response, body) {
if (!error && response.statusCode \== 200) {
console.log(body) // 打印google首页
resolve(body);
}else{
reject(error)
}
})
})
问题分析
在控制台中查看网页中的请求发现返回头的charset是gb18030,而Node.js无法解码该中文字符集,故而需要转码
解决方案
const iconv\=require('iconv-lite');
const https \= require("https");
var BufferHelper \= require('bufferhelper');
var url\='https://apis.map.qq.com/jsapi?qt=poi&wd='+encodeURI(name);
return await new Promise((resolve,reject)=>{
https.get(url,function(res){
var bufferHelper \= new BufferHelper();
res.on('data', function (chunk) {
bufferHelper.concat(chunk);
});
res.on('end',function(){
console.log(iconv.decode(bufferHelper.toBuffer(),'GB18030'));
});
})
})
注意:
- 此处的重点在于需要在接收https返回数据的时候把数据推入到buffer中,然后统一对buffer进行转码。如果字节使用iconv转码不起作用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。