微信小程序实现GBK和UTF-8互转

本文介绍如何在微信小程序中实现GBK和UTF-8编码的互转。通过Decode.js和Encode.js两个文件,将GBK格式的二进制文件转化为UTF-8字符串,并提供相应的解码关键代码。
部署运行你感兴趣的模型镜像

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
		}

 

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值