收藏
回答

如何正常读取 GB2312 编码文件?

目标

读取一个本地 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 编码,也试了很多其他方法都无效,请问各位老师有什么方法或解决思路吗?感谢。

回答关注问题邀请回答
收藏

2 个回答

  • 拾忆
    拾忆
    2021-02-13

    试试这个看看

    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("%"));
     }
    
    2021-02-13
    有用
    回复 2
    • minimalistrojan
      minimalistrojan
      发表于移动端
      2021-02-13
      收到,感谢。
      2021-02-13
      回复
    • 笨笨熊
      笨笨熊
      2022-11-17回复minimalistrojan
      能跑起来吗?
      2022-11-17
      回复
  • Vinlic
    Vinlic
    2021-02-13

    存储该json文件时就应该用utf-8编码,否则你可以使用npm模块iconv-lite

    2021-02-13
    有用
    回复 1
    • minimalistrojan
      minimalistrojan
      发表于移动端
      2021-02-13
      导出时的编码无法改变,是导出的第三方网站自身已经设定好的。尝试过用工具转换成 UTF-8,但读取后又得再把 Unicode 转换回中文。我先去试试您说的包,感谢。
      2021-02-13
      回复
登录 后发表内容
问题标签