小程序
小游戏
企业微信
微信支付
扫描小程序码分享
小程序请求流式接口,然后根据接口返回内容进行解码,解码中间报错
报错截图如下图所示:
解码过程如下:
const arrayBuffer = 流式接口返回内容; const uint8Array = new Uint8Array(arrayBuffer); let str = new TextEncoding.TextDecoder('utf-8').decode(uint8Array);
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
这是因为在真机跟开发者工具是两种编码格式导致的吧,试下这种方式 /** * 将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; }
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
这是因为在真机跟开发者工具是两种编码格式导致的吧,试下这种方式 /** * 将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; }