JavaScript - 在Unicode字符串和ArrayBuffer之间进行转换

5

有没有人知道一个脚本,能够将字符串使用unicode编码转换为ArrayBuffer?

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

感谢您的帮助!


Node.js文档称它是Unicode BMP(基本多语言平面)编码。 - Van Coding
1
你们的缓冲区端口是开源的吗? - Janus Troelsen
1
@Janus Troelsen 我还没有在Github上发布它,但如果你想的话我可以这样做。但是我认为有更好的选择。只需在Github上搜索“buffer browserify”,您将找到非常好的代码。其中一个存储库也被node-browserify使用。希望能帮到你。 - Van Coding
@Janus Troelsen 我的实现并没有 Node 原始实现的所有功能。例如,“copy”也在我的实现中缺失。此外,我从未在生产环境中使用过它,所以我真的建议你使用 GitHub 上的某些东西。它们也更快。 - Van Coding
@Janus Troelsen,这是您需要的链接:https://github.com/VanCoding/broffer.js.git。 - Van Coding
显示剩余5条评论
1个回答

8

我自己找到了答案。

解码:

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++]);
}

4
对于较长的字符串,执行s += String.fromCharCode(this[i++]*256+this[i++]);会很慢。可以将字符编码收集到数组arr中,然后使用String.fromCharCode.apply(arr)来执行。 - kirilloid
3
哎呀,抱歉。String.fromCharCode.apply(*null*, arr) 的意思是将数组 arr 中的 Unicode 编码转换为对应的字符,并以字符串形式返回。在这个表达式中,apply() 方法用于将数组作为参数传递给 String.fromCharCode() 方法。 - kirilloid
ROFL。我刚刚遇到了同样的问题,当从Java Applet传输数据到Javascript时。 - kirilloid
1
一些Unicode字符使用超过2个字节,所以我不确定你如何检测它们等等。这是一个很长的规范,而且我已经有一段时间没有浏览它了。 - J Chris A
这似乎不起作用。在终端中sha1sum“hello world”的字节,然后使用该方法进行转换,您将使用Web Crypto API获得完全不同的结果。它可能包含字符串,但它不会转换它。请参见https://gist.github.com/coolaj86/87d834cfe6ec07d2ee81 我仍然没有弄清楚多字节字符的匹配问题,但我已经让单字节字符与预期的sha1sums相匹配了。 - coolaj86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接