5***@qq.com
5***@qq.com
  • 发布:2020-07-03 18:11
  • 更新:2022-11-26 00:14
  • 阅读:3563

uniapp TextDecoder问题

分类:uni-app

对readByteArray进行解码,打开手机调试的时候正常。但是打包后安装或者不打开手机调试的话,报错:
ReferenceError: Can't find variable: TextDecoder

代码如下:

let totalUint8Array = new Uint8Array(this.readByteArray)  
let qrContent = new TextDecoder("gb2312").decode(totalUint8Array);
2020-07-03 18:11 负责人:DCloud_UNI_GSQ 分享
已邀请:
DCloud_UNI_GSQ

DCloud_UNI_GSQ

机型和系统信息补充一下

4***@qq.com

4***@qq.com - liuxiaohui

我也运见同样的问题:
荣耀畅玩9X
19:07:54.095 ReferenceError: TextDecoder is not defined。
在调试手机时,TextDecoder 正常。拨掉数据线运行,报上面的错误。

DCloud_UNI_GSQ

DCloud_UNI_GSQ

TextDecoder 在不同设备存在兼容问题,调试的时候js是运行在电脑上的

  • 8***@qq.com

    那怎么处理呢,有没有替代方案?

    2020-10-30 16:28

  • DCloud_UNI_GSQ

    回复 8***@qq.com: 尝试用 polyfill 兼容,比如在npm搜索一下:https://www.npmjs.com/search?q=TextDecoder

    2020-12-03 18:12

  • 2***@qq.com

    https://www.npmjs.com/package/fast-text-encoding

    这个可以,打补丁

    2023-06-07 20:06

  • Jxzx

    回复 2***@qq.com: 您好,关于fast-text-encoding这个库打补丁这个问题。我这边遇到一些问题,想请教一下您。我是uniapp接入web3钱包,他引入的文件中有使用TextEncoder 在H5上是可以的,但是运行到android 真机上。提示 TextEncoder is not defined 。请问这个补丁能解决嘛,我尝试了一下,结果还是不行。

    2023-07-05 14:28

  • Jxzx

    回复 Jxzx: main.js 中全局挂载。import {

    TextEncoder,

    TextDecoder

    } from 'text-decoding'

    global.TextEncoder = TextEncoder;

    global.TextDecoder = TextDecoder;

    2023-07-05 15:56

8***@qq.com

8***@qq.com

同问,安卓设备试了不同的机型,全部是TextDecoder is not defined。

深

这个问题解决了吗?

小辛一族

小辛一族

整理下心得 import { TextEncoder, TextDecoder } from 'text-decoding'

传入arrayBuf(蓝牙接收到的)

let u8arr = Array.prototype.map.call(new Uint8Array(arrayBuf), x => x)

let decoder = new TextDecoder('gb18030').decode(new Uint8Array(u8arr))

return decoder

  • 2***@qq.com

    有没有详细点的使用教程

    2022-03-17 15:35

  • 小李爱吃鱼

    大佬 有详细的教程可以参考一下吗

    2022-10-15 11:37

  • 过景不候

    可以解决 感谢靓仔

    2023-11-29 11:09

喜欢技术的前端

喜欢技术的前端 - QQ---445849201

大佬们,解决了吗

小李爱吃鱼

小李爱吃鱼

var trimedStr = strhex.trim();
var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr;
var len = rawStr.length;
if (len % 2 !== 0) {
alert("Illegal Format ASCII Code!");
return "";
}
var curCharCode;
var resultStr = [];
for (var i = 0; i < len; i = i + 2) {
 curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
 resultStr.push(String.fromCharCode(curCharCode));
}
return resultStr.join("");

可以改为这种

faster

faster

可以使用第三方的npm包 iconv-lite 来解决

首先在项目目录下 初始化npm环境

npm init -y

然后安装 iconv-lite包

npm i iconv-lit

使用前先导入

import * as iconv from 'iconv-lite'  
export default{  
       .....  
    }  

需要编码的地方

iconv.encode(‘hello world’,'ascii')
iconv.encode(‘汉字’,'gbk')
iconv.encode(‘汉字’,'utf8')

要回复问题请先登录注册