问答

nodejs的buffer数组中文编码是如何转换的?

作者:admin 2021-05-11 我要评论

buffer中转换数字其实很好理解。 例如:buffer 0x36,而0x36对应Utf8中的‘6’; 再例如:buffer 0x36 0x75,则对应'6u'; 这样一值一码还能对应上。 但是中文就想...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

buffer中转换数字其实很好理解。
例如:<buffer 0x36>,而0x36对应Utf8中的‘6’;
再例如:<buffer 0x36 0x75>,则对应'6u';
这样一值一码还能对应上。
但是中文就想不通了。
例如:<buffer e5 b0 8f>,对应的'小'。
utf8中,'小'的charCode为23567,也就是0x5c0f,但buffer中为e5 b0 8f。
所以想知道这是怎么计算的?还是说buffer有自己的一套编码规则?

###

buffer仅仅是数据数组序列,比如0x36是一个字符,0xe5,0xb0,0x8f一起表示一个字符,这些对buffer来说其实没有区别,只是存储的字节数据多少的问题,具体对这些数据如何处理其实仅仅是发生在存入和取出的时候,存入时本质来说就是把某个字符数据按编码转成字节数据序列,取出时则是相反的过程而已。

而utf-8中对每个中文字符已经有固定的编码,在buffer存入时,只是把这些编码查询出来(在系统支持下),然后按字节存入而已,取出是就是这个过程的逆过程。

###

buffer下面存储用的Uint8Array, 汉字有的占三个的uint8, Unicode字符还有的占4个uint8,比如很多 emoji 字符。你要用uint8array去看。

image.png

async function bufferCode (str: string) {
    const result: string[] = []
    const buffer: Uint8Array = await new Blob([str]).arrayBuffer() as Uint8Array
    buffer.forEach(c => result.push(c.toString(16)))
    return result
}
async function run () {
    console.log('6', await bufferCode('6'))
    console.log('6u', await bufferCode('6u'))
    console.log('小', await bufferCode('小'))
}
run()

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nodejs的buffer数组中文编码是如何转换

    nodejs的buffer数组中文编码是如何转换

  • vue后台管理 做一个读取卡号的功能,怎

    vue后台管理 做一个读取卡号的功能,怎

  • forge 控制正交视图

    forge 控制正交视图

  • 请问nodejs中writeFileSync生成的文本

    请问nodejs中writeFileSync生成的文本

腾讯云代理商
海外云服务器