requestTask.onChunkReceived(res => {
let decoder = new TextDecoder('utf-8');
let str = decoder.decode(res.data); // 将ArrayBuffer类型数据解码为字符串类型
console.log(str);
})
服务器返回的数据,每个分片都是'123你好',对应utf-8编码格式为b'123\xe4\xbd\xa0\xe5\xa5\xbd',但是在onChunkReceive中得到的ArrayBuffer是:
96,125不知道是什么值,调试器里显示报文里的值是正确的:
我估计问题在这里,当要监听分块返回时,他将返回结果强制为文本了,触发分块监听时,拿文本转到arraybuffer时,直接用的是文本的长度,中文对应的字节就变为一个了,这就解释了,英文和数字没问题,中文就乱码。
我现在的解决方法比较残暴,把二进制转换为base16编码😂
花了3天时间,终于搞定了,解决思路是在服务端进行Base64编码,然后在小程序接收之后,先转bytearray转base64, base64解码为string,在转为bytearray,最后使用TextDecoder的decode方法解码即可。
服务端返回的时候 encode 下, 客户端再decode不就好了
求解法
楼主,您这个问题解决了吗?
我也遇到了。可以一起讨论,我的微信jiaguang