eggd:ctx.curl的乱码问题

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')

返回结果就正常的了。

补充:

返回结果出错如下:别忘记判断错误处理~~

接口超时的返回结果

接口正常的返回结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值