1

问题描述

http://www.gpsspg.com/maps.ht...
1.png
但是使用Node.js获取到的返回值结果如下
2.png

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无法解码该中文字符集,故而需要转码
3.png

解决方案

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转码不起作用。

深圳飘
55 声望40 粉丝

暂时没有啥介绍的。