js虽然有第三方支持的GBK工具,但是小程序没有;而我开发中又需要进行格式的转化,就依据前人的经验做了一份出来。

分为两部分:Decode.js和Encode.js。分别是GBK格式的二进制文件转化为UTF-8的String和反转。

import Encoder from "./encode/Encoder";

import Decoder from "./encode/Decoder";

//实现参考例子

var message = "减肥是一件困难的事情";

//UTF-8转GBK

var gbkArray = Encoder.hexstrToArray(Encoder.stringToGbkHexstr(message));

console.log("gbkArray>>" + gbkArray);

//GBK转UTF-8

var utfStr = Decoder.GBKHexstrToString(Decoder.binaryarrayToHexstr(gbkArray));

console.log("utfStr>>" + utfStr);

文件下载地址:GITHUB

Decoder.js 因为太长,所以只贴出关键代码

/**

* GBK二进制编码集合,转换成标准的javascript String输出

*/

function GBKHexstrToString(input){

if (input.length % 2 !== 0) {

throw new Error('错误的输入:' + input);

}

var output = '';

for (var offset = 0; offset < input.length;) {

var value = input.substring(offset, offset + 2);

offset += 2;

if (value.charAt(0) < '8') {

output += String.fromCharCode(parseInt(value, 16));

continue;

} else {

var low = input.substring(offset, offset + 2);

offset += 2;

value = value + low;

output += String.fromCharCode(GBKTable[parseInt(value, 16)]);

}

}

return output;

}

/**

* 将binaryArray转化成hexString

*

* @param array 输入的binaryArray

* @returns {string} 输出的hexString

*/

function binaryarrayToHexstr (array) {

var output = '';

array.forEach(function (i) {

output += oneByteIntToHex(i);

});

return output.toUpperCase();

};

/***

* 将一个字节的整型转换成16进制

*

* @private

* @param i

* @returns {string}

*/

function oneByteIntToHex (i) {

var output = '';

i = parseInt(i);

output += (i >> 4 & 0x0f).toString(16);

output += (i & 0x0f).toString(16);

return output.toUpperCase();

};

module.exports = {

GBKHexstrToString: GBKHexstrToString,

oneByteIntToHex: oneByteIntToHex,

binaryarrayToHexstr: binaryarrayToHexstr

}

Encode.js

/**

* 标准的Javascript String转换成GBK二进制编码集合输出

* 支持Array/String输入,异步

*/

function stringToGbkHexstr (input) {

var output = '';

for (var offset = 0; offset < input.length; offset++) {

var code = input.charCodeAt(offset) & 0xffff;

if (code <= 0xFF) {

output += intToHex(code);

} else {

output += GBKTable[code];

}

}

return output;

}

/***

* 将一个字节的整型转换成16进制

*

* @private

* @param i

* @returns {string}

*/

function intToHex (i) {

var output = '';

for (; i != 0; i = i >> 8) {

output = oneByteIntToHex(i & 0xff) + output;

}

return output.toUpperCase();

}

/***

* 将一个字节的整型转换成16进制

*

* @private

* @param i

* @returns {string}

*/

function oneByteIntToHex (i) {

var output = '';

i = parseInt(i);

output += (i >> 4 & 0x0f).toString(16);

output += (i & 0x0f).toString(16);

return output.toUpperCase();

};

/**

* HexStr 转 ArrayBuffer

*/

function hexstrToArray (input) {

if (input.length % 2 != 0) {

throw new Error("not support length:" + input.length);

}

var output = new Array();

var index = 0, offset = 0;

for (; offset < input.length;) {

var expected = input.substring(offset, offset + 1);

var hi = (parseInt(expected, 16) & 0xff) << 4;

offset++;

expected = input.substring(offset, offset + 1);

var lo = parseInt(expected, 16) & 0xff;

output[index] = hi + lo;

index++;

offset++;

}

return output;

}

module.exports = {

stringToGbkHexstr: stringToGbkHexstr,

intToHex: intToHex,

hexstrToArray: hexstrToArray

}

小程序服务器gbk编码,微信小程序实现GBK和UTF-8互转相关推荐

  1. 微信小程序服务器开小差了,微信小程序wx.request请求封装

    微信小程序 wx.request RequestTask wx.request(Object object)发起 HTTPS 网络请求. 示例代码 wx.request({ url: 'test.ph ...

  2. 微信小程序服务器新手教程,微信小程序新手教程上手开发与使用总结

    微信小程序新手教程上手开发与使用总结,本篇默认已经成功安装微信小程序工具,来和小编一起看看吧 一.模板 WXML提供模板组件给我们使用,可以在模板定义公用的代码片段,然后在需要引用的地方进行调用. 定 ...

  3. 微信小程序服务器未响应,微信小程序点击事件失效

    想在主页上添加一个搜索功能 但是加上之后发现原有的页面点击事件没有反应了 个人怀疑是input和bindtap互相影响? 有人碰到类似的情况吗 是怎么解决的 {{item}} this is a te ...

  4. 微信小程序服务器支付sdk,微信小程序之支付后如何调用SDK的异步通知

    微信小程序之支付后如何调用SDK的异步通知 发布时间:2021-07-05 10:47:33 来源:亿速云 阅读:57 作者:小新 这篇文章主要介绍微信小程序之支付后如何调用SDK的异步通知,文中介绍 ...

  5. 微信小游戏服务器数据持久化,微信小程序wx.setStorage数据缓存实现缓存过期时间...

    为了项目性能等方面的考虑,有时候有必要为用户经常访问的页面使用缓存机制:在技术上,服务端和前端都有相应的缓存机制.比如传统的session及cookie等等,在微信小程序中,并没有cookie机制,但 ...

  6. 小程序服务器换肤,微信小程序实现换肤功能

    pc或者移动端实现换肤功能还是比较简单的,大致就是需要换肤的css,还有正常的css:把当前皮肤类型存入本地:然后通过js读取并判断当前应该加载哪套css. 由于微信小程序没有操作wxss的api,所 ...

  7. 微信小程序服务器连接失败,微信小程序在苹果上出现[request:fail 发生了 SSL 错误无法建立与该服务器的安全连接。]错误的解决方案...

    由于原本的服务器出故障,在使用临时服务器的时候出现苹果无法加载小程序 出现 request:fail 发生了 SSL 错误无法建立与该服务器的安全连接.的问题 问题原因: 2017年1月1日起,苹果强 ...

  8. 微信小程序 服务器触发事件,微信小程序组件间通讯与事件

    ##组件间通讯与事件 一.前言 如果小程序中有可复用的UI且具有一定的功能性,就可以使用自定义组件将其封装起来.(如果仅仅只需要复用UI可使用template)下面介绍父子组件的数据传递方法,以及一个 ...

  9. 微信小程序服务器错误500,微信小程序配置参数缺少,报错500

    开发作者可能在fecshop\appserver\config\fecshop_local_modules\Wx.php文件配置了['home4TipImg'],但是现在默认的最新版本暂时是没有配置的 ...

最新文章

  1. redis10---Setbit 的实际应用
  2. mysql存储过程实例_mysql存储过程案例讲解
  3. 21天学通c语言第四版pdf,21天学通Visual C++ PDF扫描版[116MB]
  4. fis 详细介绍(mac版) - 12-26没有弄完 - 暂停
  5. 白鹭引擎制作滚动框,类似div的oveflow
  6. android button imagebutton 区别,android - 可点击的ImageView和ImageButton之间的区别
  7. C++设计模式--观察员
  8. mysql删除树_B-树的删除过程介绍
  9. 信创终端违规外联案例分析及防控措施
  10. 美国CSTA K-12计算机科学标准「中文版」转
  11. 我们期待自己成为一个优秀的软件模型设计者
  12. [转载]丢掉鼠标-Mac神软Alfred使用手册1_我是亲民_新浪博客
  13. 音频采样及编解码——LPCM 、ADPCM、G711、G726
  14. 三步集成美图软件背景虚化景深效果【iOS篇】
  15. 包裹细胞膜的磁性纳米微载体/负载斑蝥素的巨噬细胞膜包封金属有机框架纳米颗粒的研究
  16. 【Codeforces】659D Bicycle Race(多边形内角和公式...)
  17. 二维对流方程matlab求解,二维对流扩散方程的有限元计算方法
  18. anaconda版本查看,老版本下载。
  19. kitti LIDAR点云生成鸟瞰图BEV
  20. UE4安卓客户端UDP协议模拟电脑操作(_杰森大师)

热门文章

  1. crazyflie2.0使用北通游戏手柄控制thrust,roll,pitch和yaw
  2. 18年前的风口 峰值用户近1亿:小灵通UT斯达康正式落幕
  3. 『EasyNotice』在.NET中多渠道告警通知——快速集成邮件/钉钉/飞书/企业微信
  4. ROS工作空间编译的时候出现类似于Could_not_find_a_package_configuration_file _provided _by该如何解决
  5. 刘嘉玲 琦琦拍摄SKII新广告
  6. 华为OD机试真题 C 实现【最长回文字符串】【2023 Q1 | 100分】
  7. i.MX6ULL终结者Linux 电容触摸屏实验硬件原理图
  8. mysql 第10章 索引
  9. SQL update语句加减乘除运
  10. 关于机器学习的定义的理解