问题描述:项目中服务端使用的GBK编码,中文字符串传输到客户端后,需要转换成UTF-8编码才能正常显示。
方法一:使用TextDecoder方法
// 先在buffer中取strlen长度的数据,是GBK编码的字符串,buffer是服务器传过来的
var bytes = new Uint8Array(view.buffer, offset, strlen);
// 调用下面的方法直接转换
var str = new TextDecoder('gbk').decode(bytes);
此方法在web环境和微信开发工具上都是没问题的,但是在真机上回报没有TextDecoder方法的错误。
并且这个方法并没有对应的TexEncoder方法,我们还有上传字符串的需求,因此只能考虑别的方法。
方法二:使用iconv-lite库
微信小游戏支持添加npm库,先添加iconv-lite库
// 在控制台进入wechatgame项目根目录,执行以下代码,可以使用默认配置,最后输入"yes"
npm init
// 初始化完成后,安装库
mpm i iconv-lite
// 由于iconv库是基于nodejs写的,而微信缺少相关库,所以这里要再加两个库,不然会报错
mpm i buffer
mpm i string_decoder
装好后有一下内容: