收藏
回答

RequestTask.onChunkReceived接收utf-8编码的中文字符串异常

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug RequestTask.onChunkReceived 工具 8.0.33 2.30.2

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不知道是什么值,调试器里显示报文里的值是正确的:


回答关注问题邀请回答
收藏

6 个回答

  • water
    water
    2023-03-16

    我估计问题在这里,当要监听分块返回时,他将返回结果强制为文本了,触发分块监听时,拿文本转到arraybuffer时,直接用的是文本的长度,中文对应的字节就变为一个了,这就解释了,英文和数字没问题,中文就乱码。


    2023-03-16
    有用 5
    回复 12
    • 平ソ
      平ソ
      2023-03-17
      服务器采用chunk传输时 小程序在success获取数据转码中文正常 但在onChunkReceived中文就异常,应该是这问题了。有什么解决方法吗?
      2023-03-17
      回复
    • SuperCarrot2012💤
      SuperCarrot2012💤
      发表于小程序端
      2023-03-18回复平ソ

      我现在的解决方法比较残暴,把二进制转换为base16编码😂

      2023-03-18
      回复
    • 首席摸鱼师
      首席摸鱼师
      2023-03-21
      微信团队没人关注这个BUG啊?我也发现了这个问题
      2023-03-21
      回复
    • 差不多吧
      差不多吧
      2023-03-21回复SuperCarrot2012💤
      可以详细点吗
      2023-03-21
      回复
    • 差不多吧
      差不多吧
      2023-03-21回复平ソ
      请问解决了吗
      2023-03-21
      回复
    查看更多(7)
  • 陈军峰
    陈军峰
    2023-05-30

    花了3天时间,终于搞定了,解决思路是在服务端进行Base64编码,然后在小程序接收之后,先转bytearray转base64, base64解码为string,在转为bytearray,最后使用TextDecoder的decode方法解码即可。

    2023-05-30
    有用 1
    回复 2
    • Zerrion
      Zerrion
      2023-06-09
      前端的写法有些绕,前端收到bytearray 后,直接 TextDecoder 解码就拿到 base64,再解码就拿到中文了,亲测有效
      2023-06-09
      回复
    • 冷暖自知🍃
      冷暖自知🍃
      2023-12-06回复Zerrion
      TextDecoder 这个函数 我真机测试会报错
      2023-12-06
      回复
  • Mitnick
    Mitnick
    2023-08-09

    服务端返回的时候 encode 下, 客户端再decode不就好了

    2023-08-09
    有用
    回复
  • 培
    2023-05-16

    求解法

    2023-05-16
    有用
    回复
  • Clarence
    Clarence
    2023-04-03

    楼主,您这个问题解决了吗?

    2023-04-03
    有用
    回复
  • 空中飞人
    空中飞人
    2023-04-02

    我也遇到了。可以一起讨论,我的微信jiaguang

    2023-04-02
    有用
    回复
登录 后发表内容