收藏
回答

小程序流式数据解码报错?

小程序请求流式接口,然后根据接口返回内容进行解码,解码中间报错

报错截图如下图所示:

解码过程如下:

const arrayBuffer = 流式接口返回内容;
const uint8Array = new Uint8Array(arrayBuffer);
let str = new TextEncoding.TextDecoder('utf-8').decode(uint8Array);
回答关注问题邀请回答
收藏

1 个回答

  • 宏
    09-09
    这是因为在真机跟开发者工具是两种编码格式导致的吧,试下这种方式
    /**
     * 将Uint8Array 转换为字符串
     * @param {uint8Array} hex - Uint8Array
     * @returns {decodedString} - 转换后的普通字符串
     */
    export function decodedString(uint8Array) {
      // 将 Uint8Array 解码为字符串
      // const decoder = new TextDecoder("utf-8"); // 使用 UTF-8 编码
      // const decodedString = decoder.decode(uint8Array);
      let txt;
      // 进行判断返回的对象是Uint8Array(开发者工具)或者ArrayBuffer(真机)
      // 1.获取对象的准确的类型
      const type = Object.prototype.toString.call(uint8Array); // Uni8Array的原型对象被更改了所以使用字符串的信息进行判断。
      if (type === "[object Uint8Array]") {
        txt = decodeURIComponent(escape(String.fromCharCode(...uint8Array)));
      } else if (uint8Array instanceof ArrayBuffer) {
        // 将ArrayBuffer转换为Uint8Array
    
    
        const arr = new Uint8Array(uint8Array);
        txt = decodeURIComponent(escape(String.fromCharCode(...arr)));
      }
      // let decodedString = decodeURIComponent(
      //   escape(String.fromCharCode(...uint8Array))
      // );
      return txt;
    }
    
    09-09
    有用
    回复
登录 后发表内容