【微信小游戏】CocosCreator做小游戏 — 字符串编码转换(UTF-8和GBK互转)
问题描述:项目中服务端使用的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互转)相关推荐
- 微信怎么做小程序【做小程序】
微信小程序是微信推出的一款轻应用,微信小程序正在变得越来越流行,越来越多的企业开始使用它来进行营销.微信小程序的应用非常广泛,可以用于商务.教育.休闲娱乐等各个方面.那么微信怎么做小程序呢? 一.小程 ...
- chrome字符串编码转换
chrome字符串编码转换 字符串编码转换涉及宽字节表示法与UTF-8表示法之间的转换.宽字节表示法与UTF-16表示法之间的转换.UTF-8表示法与UTF-16表示法之间的转换.UTF-16表示法于 ...
- 分享万能java字符串编码转换工具类
代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima ...
- 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...
- java万能编码转换_分享万能java字符串编码转换工具类
package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public cla ...
- c语言编程数独游戏,编程做数独游戏
数独游戏非常好玩,可以训练玩家的逻辑推理能力.数独游戏的规则是: 1.在9×9的大九宫格内,已给定若干数字,其他宫位留白,玩家需要自己按照逻辑推敲出剩下的空格里是什么数字. 2.必须满足的条件:每一行 ...
- unix系统编码 java_Java 正确的做字符串编码转换
字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码文件是GBK编码, 操作系统(wi ...
- 关于\x开头的字符串编码转换中文解决方法
做爬虫可能经常遇到爬取到的数据存在编码问题,简直让人头疼,比如爬取到的是这样的: 例如: \xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c 中文是: 你 ...
- linux字符串编码转换函数,Linux C++ 字符串 编码识别、编码转换
最近在做一个类似垂直下载的爬虫系统.下载之后有个解析模块,解析之后要求编码一致的向后传入索引,便遇到了编码转换问题. 1. 编码的识别 推荐使用 libchardet, 可以在这个页面下载,使用说明就 ...
最新文章
- JDK源码解析 InputStream类就使用了模板方法模式
- (转)虚函数和纯虚函数区别
- 如何解决 SQL Server 安装程序中的 COM+ 系统配置检查失败问题
- day18__文件操作
- CSDN创作的markdown语法
- 关于钥匙串中所有证书签名无效的问题解决纪录
- hdu1695 容斥原理 莫比乌斯反演
- ExtJs UI框架学习五
- [转载]利用TTL值来鉴别操作系统
- Linux 桌面版为什么打不过 Window?Linus 现身说法!
- 使用OWA无法撰写邮件内容的解决法
- HTML制作个简单的网页
- php读取 rinex,用Pandas读取GPS RINEX数据
- 谈谈你对ThreadLocal的理解
- 三角脉冲信号的表达式_脉冲发生器产生一个单三角脉冲,其波形如图所示,例1写出电压U 与.pdf...
- part Ⅲ Sightseeing and Visits 游览和参观??
- vue使用element 上传图片,修改图片
- 阿里副总裁贾扬清回应:确认离职,或投身AI架构创业!
- 基于TCP Socket和Websocket实现的相互即时通信系统
- About 一行Python代码搞定局域网内文件共享与传输