由于业务需求需要用到TextDecoder完成gbk解码,在网页端和小程序开发者工具运行是没有问题的,但在小程序手机真机运行报错,通过资料查询了解到是微信小程序真机存在兼容问题。报错如下:
MiniProgramError
TextDecoder is not defined
ReferenceError: TextDecoder is not defined
目前主流的两种解决方案:
解决方案1(不支持gbk)
使用兼容写法
//TextEncoder
unescape(encodeURIComponent(inputString)).split("").map(val => val.charCodeAt());
//TextDecoder
decodeURIComponent(escape(String.fromCharCode(...['arraybuffer'])));
但经过测试,以上方法不适合gbk,所以得看第二个方案
解决方案2
引入polyfill,即text-decoding库
npm install text-decoding
const TextDecoder = require('text-encoding');
const decoder = new TextDecoder('gbk');
引入后即可正常使用。但引入后小程序总包体积直接多了500多kb,十分夸张。于是在网上查看相关的解决方案,没有看到有人提出体积优化的解决方案,遂自己研究了