0%

Node获取GBK编码“字符串”

UTF8 to GBK Hex String

iconv-lite

通常都会使用 iconv-lite 这个包实现Node的编码转换,但是这个包是基于 Buffer 的,如果传递给其他语言的系统,需要先转换为 String 字符串。

在网上查阅了相关资料,并没有给出很好的解答。一些比较老的回答都在说,Node中无法把Buffer转换成gbk字符串。

俗话说有问题找师兄,果然,咨询同组师兄后得到了期望的结果。转换过程很巧妙,在此分享出来:

1
2
3
4
5
6
const iconv = require('iconv-lite');

function toGBKString(str) {
return iconv.encode(str, 'gbk')
.reduce((pre, cur) => `${pre}${cur.toString(16)}`, '');
}

以上是不加百分号的,如果需要可以在模板字符串中自行加上。

2018-04-18更

由于Buffer本身支持hex的转换

Buffer instances are commonly used to represent sequences of encoded characters such as UTF-8, UCS2, Base64, or even Hex-encoded data. It is possible to convert back and forth between Buffer instances and ordinary JavaScript strings by using an explicit character encoding.

‘hex’ - Encode each byte as two hexadecimal characters.

因此reduce可以继续简化为

1
iconv.encode(str, 'gbk').toString('hex');