目标
读取一个本地 JSON 文件(文件导出自其他网站),使用其中的数据。文件如下图所示:
实现思路
1. 使用 wx.chooseMessageFile
从会话里选择文件;
2. 使用 wx.cloud.uploadFile
上传文件;
3. 使用 wx.cloud.downloadFile
下载文件;
4. 使用 wx.getFileSystemManager().readFileSync
读取文件;
5. 使用 JSON.parse
构造对象 ...
所遇问题
问题出在第 4 步。由于导出的 订单.json
文件使用的是 GB2312 编码,小程序端读出来的中文全部乱码。wx.getFileSystemManager().readFileSync
中的参数无法指定 GB2312 编码,也试了很多其他方法都无效,请问各位老师有什么方法或解决思路吗?感谢。
试试这个看看
function gb2utf8(data){ var glbEncode = []; gb2utf8_data = data; execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript"); var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2"); t=t.split("@"); var i=0,j=t.length,k; while(++i<j) { k=t[i].substring(0,4); if(!glbEncode[k]) { gb2utf8_char = eval("0x"+k); execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript"); glbEncode[k]=escape(gb2utf8_char).substring(1,6); } t[i]=glbEncode[k]+t[i].substring(4); } gb2utf8_data = gb2utf8_char = null; return unescape(t.join("%")); }
存储该json文件时就应该用utf-8编码,否则你可以使用npm模块iconv-lite