问题描述:项目中服务端使用的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

装好后有一下内容:

然后打开微信开发工具,打开“详情->本地设置“,勾选“使用npm模块”

打开菜单里面的“工具”,选择“构建npm”,构建完成就可以使用了。

const { Buffer } = require("buffer");
var iconv = require("iconv-lite");let str2gbk = function (str) {if (str.length <= 0) return [];return iconv.encode(str, 'GBK');
};let gbk2str = function (bytes) {if (bytes.length <= 0) return "";return iconv.decode(Buffer.from(bytes), 'GBK');
};

解消息和发消息时:

// 发送消息时,将str字符串写入buffer
var bytes = str2gbk(str);
for (var j = 0; j < bytes.length; j++) {view.setInt8(offset++, bytes[j]);
}// 接收消息时,在buffer中读取字符串
var bytes = new Uint8Array(view.buffer, offset, strlen);
offset += strlen;
let str = gbk2str(bytes);

【微信小游戏】CocosCreator做小游戏 — 字符串编码转换(UTF-8和GBK互转)相关推荐

  1. 微信怎么做小程序【做小程序】

    微信小程序是微信推出的一款轻应用,微信小程序正在变得越来越流行,越来越多的企业开始使用它来进行营销.微信小程序的应用非常广泛,可以用于商务.教育.休闲娱乐等各个方面.那么微信怎么做小程序呢? 一.小程 ...

  2. chrome字符串编码转换

    chrome字符串编码转换 字符串编码转换涉及宽字节表示法与UTF-8表示法之间的转换.宽字节表示法与UTF-16表示法之间的转换.UTF-8表示法与UTF-16表示法之间的转换.UTF-16表示法于 ...

  3. 分享万能java字符串编码转换工具类

    代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima ...

  4. 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...

  5. java万能编码转换_分享万能java字符串编码转换工具类

    package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public cla ...

  6. c语言编程数独游戏,编程做数独游戏

    数独游戏非常好玩,可以训练玩家的逻辑推理能力.数独游戏的规则是: 1.在9×9的大九宫格内,已给定若干数字,其他宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字. 2.必须满足的条件:每一行 ...

  7. unix系统编码 java_Java 正确的做字符串编码转换

    字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码文件是GBK编码, 操作系统(wi ...

  8. 关于\x开头的字符串编码转换中文解决方法

    做爬虫可能经常遇到爬取到的数据存在编码问题,简直让人头疼,比如爬取到的是这样的: 例如: \xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c 中文是: 你 ...

  9. linux字符串编码转换函数,Linux C++ 字符串 编码识别、编码转换

    最近在做一个类似垂直下载的爬虫系统.下载之后有个解析模块,解析之后要求编码一致的向后传入索引,便遇到了编码转换问题. 1. 编码的识别 推荐使用 libchardet, 可以在这个页面下载,使用说明就 ...

最新文章

  1. JDK源码解析 InputStream类就使用了模板方法模式
  2. (转)虚函数和纯虚函数区别
  3. 如何解决 SQL Server 安装程序中的 COM+ 系统配置检查失败问题
  4. day18__文件操作
  5. CSDN创作的markdown语法
  6. 关于钥匙串中所有证书签名无效的问题解决纪录
  7. hdu1695 容斥原理 莫比乌斯反演
  8. ExtJs UI框架学习五
  9. [转载]利用TTL值来鉴别操作系统
  10. Linux 桌面版为什么打不过 Window?Linus 现身说法!
  11. 使用OWA无法撰写邮件内容的解决法
  12. HTML制作个简单的网页
  13. php读取 rinex,用Pandas读取GPS RINEX数据
  14. 谈谈你对ThreadLocal的理解
  15. 三角脉冲信号的表达式_脉冲发生器产生一个单三角脉冲,其波形如图所示,例1写出电压U 与.pdf...
  16. part Ⅲ Sightseeing and Visits 游览和参观??
  17. vue使用element 上传图片,修改图片
  18. 阿里副总裁贾扬清回应:确认离职,或投身AI架构创业!
  19. 基于TCP Socket和Websocket实现的相互即时通信系统
  20. About 一行Python代码搞定局域网内文件共享与传输

热门文章

  1. 华为鸿蒙os下载安装,华为鸿蒙系统安装包
  2. c语言pl是什么意思,相机中PL,ND各代表什么?
  3. Elasticsearch优秀的索引设置技巧
  4. python代码画玫瑰花
  5. 无线手持PDA可以给企业带来什么?
  6. python实验中遇到的问题及解决方法_Python中遇到的小问题及解决方法汇总
  7. 经典案例--JS购物车
  8. 装机注意事项:一次装机差点翻车的经历
  9. CTO问我,为什么需要API网关?
  10. 24点游戏的递归解法和Python实现