V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nodejserinwuhan
V2EX  ›  Node.js

请教一个 nodejs ArrayBuffer 的问题。

  •  
  •   nodejserinwuhan · 2018-08-24 15:51:15 +08:00 · 4285 次点击
    这是一个创建于 2289 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文: 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 个字节么?

    5 条回复    2018-08-25 11:36:16 +08:00
    oswuhan
        1
    oswuhan  
       2018-08-24 17:34:32 +08:00
    Unicode,了解一下。

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

    '𠀀'.length //2
    lzvezr
        5
    lzvezr  
       2018-08-25 11:36:16 +08:00 via Android
    不是有 buffer.from 嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:44 · PVG 08:44 · LAX 16:44 · JFK 19:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.