Nodejs细节1:如何将中文转为unicode和GB2312

Nodejs细节1:如何将中文转为unicode和GB2312

将中文转为unicode其实nodejs自带的模块就可以实现了。要实现转GB2312要借助iconv-lite模块。 转Uincode: var unicode = new Buffer(msg, ‘uCS2’); var unicodeHex = “”; for (var i = 0; i < unicode.length; i = i + 2) { unicodeHex += utils.toHex(unicode[i]) + utils.toHex(unicode[i + 1]); }

转为GB2312:

//将中文转化为GB2312 function chinese2Gb2312(data) { var gb2312 = iconv.encode(data.toString(‘UCS2’), ‘GB2312’); var gb2312Hex = “”; for (var i = 0; i < gb2312.length; ++i) { gb2312Hex += utils.toHex(gb2312[i]); } return gb2312Hex; }

注意js文件要保存为uft-8格式。不然结果是不对的


11 回复

Node.js 细节1:如何将中文转为Unicode和GB2312

在Node.js中,将中文转换为Unicode编码可以通过内置模块直接实现。而将中文转换为GB2312编码则需要借助iconv-lite模块。

转换为Unicode

我们可以使用Node.js的内置模块来将中文转换为Unicode编码。以下是具体的步骤和示例代码:

const msg = '你好,世界!';

// 创建一个Buffer对象,并指定编码为'ucs2'
const buffer = Buffer.from(msg, 'ucs2');

// 将Buffer对象转换为十六进制字符串
let unicodeHex = "";
for (let i = 0; i < buffer.length; i += 2) {
    const byte1 = buffer[i].toString(16).padStart(2, '0');
    const byte2 = buffer[i + 1].toString(16).padStart(2, '0');
    unicodeHex += `\\u${byte1}${byte2}`;
}

console.log("Unicode:", unicodeHex); // 输出:\u4f60\u597d\uff0c\u4e16\u754c\uff01

在这个示例中,我们首先创建了一个Buffer对象,并指定了编码为ucs2(即UTF-16)。然后通过遍历Buffer对象并将每个字节转换为十六进制字符串,最后拼接成Unicode编码形式。

转换为GB2312

要将中文转换为GB2312编码,我们需要使用iconv-lite模块。首先,确保已经安装了iconv-lite模块:

npm install iconv-lite

接下来,使用以下代码将中文转换为GB2312编码:

const iconv = require('iconv-lite');

function chinese2Gb2312(data) {
    // 将字符串转换为UCS2编码的Buffer
    const ucs2Buffer = Buffer.from(data, 'ucs2');
    
    // 使用iconv-lite将UCS2编码的Buffer转换为GB2312编码的Buffer
    const gb2312Buffer = iconv.encode(ucs2Buffer, 'gb2312');
    
    // 将GB2312编码的Buffer转换为十六进制字符串
    let gb2312Hex = "";
    for (let i = 0; i < gb2312Buffer.length; ++i) {
        gb2312Hex += gb2312Buffer[i].toString(16).padStart(2, '0');
    }
    
    return gb2312Hex;
}

const data = '你好,世界!';
const gb2312Hex = chinese2Gb2312(data);

console.log("GB2312:", gb2312Hex); // 输出相应的十六进制字符串

在这个示例中,我们首先将输入字符串转换为UCS2编码的Buffer对象。接着,使用iconv-lite模块将这个Buffer对象转换为GB2312编码的Buffer对象。最后,我们将这个GB2312编码的Buffer对象转换为十六进制字符串。

注意事项

确保你的JavaScript文件以UTF-8编码保存,否则可能会导致字符编码问题。你可以使用文本编辑器(如VSCode、Sublime Text等)检查并设置文件编码为UTF-8。


utils.toHex 这个找不到在哪里,报错,要引入什么包吗

自己写的工具类而已

exports.pad = function (number, length, pos) { var str = “” + number; while (str.length < length) { //向右边补0 if (“r” == pos) { str = str + “0”; } else { str = “0” + str; } } return str; }

exports.toHex = function (chr, padLen) { if (null == padLen) { padLen = 2; } return this.pad(chr.toString(16), padLen); }

哦,我说怎么找不到,这样的话,字母数字不会被转换吧,在写一个压缩工具,因为在gbk页面中用到,所以要转一下

测试了一下,所有的都转码了,我只要代码中的中文字符进行转码

function enunicode(code){ var unicode=new Buffer(code,‘uCS2’); var uHex=’’; for(var i=0,l=code.length;i<l;i+=2){ uHex += utils.toHex(unicode[i]) + utils.toHex(unicode[i + 1]); } return uHex; }; 应该怎么改, 本人不才,第一次用node写工具

你要什么码转什么码

加我QQ436062598

解决了,用了一个笨方法

function enunicode(code){
code=code.replace(/[\u00FF-\uFFFF]/g,function($0){
		return '\\u'+$0.charCodeAt().toString(16);
});
return code;

};

将中文转为Unicode和GB2312在Node.js中可以通过内置模块和第三方库来实现。

转换为Unicode

在Node.js中,可以使用Buffer对象将字符串转换为UTF-16编码(即Unicode),然后将其转换为十六进制表示。

const msg = '你好';
const buffer = Buffer.from(msg, 'ucs2'); // 使用'ucs2'编码将字符串转换为Buffer
let unicodeHex = '';
for (let i = 0; i < buffer.length; i += 2) {
    const hex = buffer[i].toString(16).padStart(4, '0') + buffer[i + 1].toString(16).padStart(4, '0');
    unicodeHex += hex + ' ';
}
console.log('Unicode:', unicodeHex.trim());

转换为GB2312

为了将中文转换为GB2312编码,我们需要使用iconv-lite模块。首先安装iconv-lite模块:

npm install iconv-lite

然后,我们可以使用以下代码进行转换:

const iconv = require('iconv-lite');
const msg = '你好';

// 将字符串转换为GB2312编码的Buffer
const gb2312Buffer = iconv.encode(msg, 'gb2312');

// 将Buffer转换为十六进制字符串
let gb2312Hex = '';
for (let i = 0; i < gb2312Buffer.length; i++) {
    gb2312Hex += gb2312Buffer[i].toString(16).padStart(2, '0');
}
console.log('GB2312:', gb2312Hex);

注意事项

  • 确保你的JS文件保存为UTF-8格式。
  • 使用iconv-lite模块时,需要先安装该模块。
  • 以上代码假设你已经有一个字符串变量msg包含你想要转换的中文字符。
回到顶部