请教一个 nodejs ArrayBuffer 的问题。

2018-08-24 15:51:15 +08:00
 nodejserinwuhan

原文: http://javascript.ruanyifeng.com/stdlib/arraybuffer.html#toc11

// ArrayBuffer 转为字符串,参数为 ArrayBuffer 对象 function ab2str(buf) { return String.fromCharCode.apply(null, new Uint16Array(buf)); }

// 字符串转为 ArrayBuffer 对象,参数为字符串 function str2ab(str) { var buf = new ArrayBuffer(str.length * 2); // 每个字符占用 2 个字节 var bufView = new Uint16Array(buf); for (var i = 0, strLen = str.length; i < strLen; i++) { bufView[i] = str.charCodeAt(i); } return buf; }

上面 var buf = new ArrayBuffer(str.length * 2); // 每个字符占用 2 个字节 这一句怎么理解,如果是汉字,不是有 3 个字节么?

4274 次点击
所在节点    Node.js
5 条回复
oswuhan
2018-08-24 17:34:32 +08:00
Unicode,了解一下。

阮博主的另外一篇文章介绍了这个东西,http://www.ruanyifeng.com/blog/2014/12/unicode.html
nodejserinwuhan
2018-08-24 18:41:00 +08:00
@oswuhan 后来多方了解了一下,ArrayBuffer 里面存储的是 unicode 码点,码点的话两个字节够了。大于两个字节不支持
zbinlin
2018-08-24 19:35:41 +08:00
用来存储文本(字符串),要看是什么编码来的。
文中也说了,用 UTF-16 编码,那就是两个字节就行了。
如果是 utf8,就是 1-4 个字节。
rabbbit
2018-08-24 19:47:35 +08:00
utf-16 2-4 个字节
U+0000-U+FFFF 占两节
U+010000-\u10FFFF 占四节

'𠀀'.length //2
lzvezr
2018-08-25 11:36:16 +08:00
不是有 buffer.from 嘛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/482909

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX