【问题标题】:Javascript - Converting between Unicode string and ArrayBufferJavascript - 在 Unicode 字符串和 ArrayBuffer 之间转换
【发布时间】:2012-01-25 16:52:38
【问题描述】:

是否有人知道能够使用 unicode 编码将字符串转换为 ArrayBuffer 的脚本?

我正在创建一个与 node.js 的“缓冲区”等效的浏览器端。剩下的唯一编码是 unicode。其他都完成了。

感谢您的帮助!

【问题讨论】:

  • 哪种unicode编码:utf-8、utf-16le、utf-16be、utf-32le、utf-32be?有不少。
  • node.js 文档说它不是 unicode BMP(基本多语言平面)编码。
  • Basic Multilingual Plane 是与 unicode 相关的抽象,但不是编码,与上面列出的所有编码相关。 UTF-16LE 用于 Javascript 浏览器引擎,根据您的回答,就是这样。
  • 你的 Buffer 端口是开源的吗?
  • @Janus Troelsen 我还没有在 github 上发布它,但如果你希望我可以做到。但我认为还有更好的。只需在 github 上搜索“buffer browserify”,您就会发现非常好的代码。 node-browserify 也使用了一个 repo。希望对您有所帮助。

标签: javascript unicode encoding arraybuffer


【解决方案1】:

我自己发现的。

解码:

var b = new Uint8Array(str.length*2);
for(var i = 0; i < b.length; i+=2){
    var x = str.charCodeAt(i/2);
    var a = x%256;
    x -= a;
    x /= 256;
    b[i] = x;
    b[i+1] = a;
}

编码

var s = "";
for(var i = 0; i < this.length;){
    s += String.fromCharCode(this[i++]*256+this[i++]);
}

【讨论】:

  • s += String.fromCharCode(this[i++]*256+this[i++]); 对于长字符串会很慢。收集数组arr中的字符码并执行String.fromCharCode.apply(arr)
  • 哎呀,对不起。 String.fromCharCode.apply(*null*, arr)
  • ROFL。在将数据从 Java 小程序传输到 Javascript 时,我也遇到了同样的问题。
  • 一些 unicode 字符使用超过 2 个字节,所以我不确定你是如何检测到这些等的,这是一个很长的规范,我已经有一段时间没有浏览它了。
  • 这似乎不起作用。 sha1sum "hello world" 的字节(在您的终端中),然后使用该方法对其进行转换,您将使用 Web Crypto API 获得完全不同的东西。它可能包含一个字符串,但它不会转换它。见gist.github.com/coolaj86/87d834cfe6ec07d2ee81我还没有弄清楚多字节字符,但我已经得到了单字节字符来匹配预期的sha1sums。
猜你喜欢
  • 1970-01-01
  • 2013-07-13
  • 2016-05-25
  • 2014-01-27
  • 2019-06-26
  • 2023-03-17
  • 2017-06-11
  • 2014-03-14
  • 2014-04-14
相关资源
最近更新 更多