eggd:ctx.curl的乱码问题
现象:使用ctx.curl出现乱码如下
代码:
// 读接口数据
const result = await ctx.helper.curl(searchurl + '?' + searchParam, {
dataType: 'text',
method: 'GET',
data: {
city: ctx.helper.encode(city.CityName, 'gb2312'),
},
timeout: 1000,
});
原因:
返回结果没有被正确的解码,结果编码是GB2312,被用默认的utf-8解码了。
深层原因:
为啥会被解成utf-8了?
我们调的接口的头文件没有正确的设置编码格式。一般接口的头部会有charset=gbk,假如没有这个,会默认为utf-8.
解决办法:
修改curl方法的调用传参,去掉 dataType: ‘text’,如下
// 读接口数据
const result = await ctx.helper.curl(searchurl + '?' + searchParam, {
// dataType: 'text',
method: 'GET',
data: {
city: ctx.helper.encode(city.CityName, 'gb2312'),
},
timeout: 1000,
});
dataType:它的作用是明确告诉 HttpClient 以 xml等文本 格式处理返回的响应 body,设置为‘json’ ,以 JSON 格式处理返回的响应 body。
不设置:默认 HttpClient 不会做任何处理,会直接返回 Buffer 类型数据。
我们在自己更加响应的编码,把返回的Buffer 类型数据转码
import * as iconv from 'iconv-lite';
iconv.decode(result, 'gb2312')
返回结果就正常的了。
补充:
返回结果出错如下:别忘记判断错误处理~~