Ada*_*M-W 7 javascript html5 typed-arrays
我遇到了一个问题,我没有看到一种方法可以轻松地将字符串转换为类型化数组,并且从类型化数组转换为字符串似乎是一个真正的痛苦,需要为每个字节进行手动字符代码转换.有没有更好的方法将字符串转换为类型化数组或反之亦然?
例:
我有一个UTF8编码的字符串,"Something or other",我想把它写成一个长度比字符串格式的ArrayBuffer.
这应该可以解决您的问题
JS 字符串以 UTF-16 编码存储,其中每个字符占用 2 个字节。String.charCodeAt 返回这些 2 字节的 Unicode。这是从 DataView 读取 UTF-16 编码字符串的方法:
DataView.prototype.getUTF16String = function(offset, length) {
var utf16 = new ArrayBuffer(length * 2);
var utf16View = new Uint16Array(utf16);
for (var i = 0; i < length; ++i) {
utf16View[i] = this.getUint8(offset + i);
}
return String.fromCharCode.apply(null, utf16View);
};
Run Code Online (Sandbox Code Playgroud)
和这些函数来转换字符串和数组缓冲区
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}
function str2ab(str) {
var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
var bufView = new Uint16Array(buf);
for (var i=0, strLen=str.length; i<strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用TextEncoder和TextDecoder,它最初仅在 Firefox 中实现,但后来获得了更广泛的支持。这是你最初提出问题两年后的事:)
幸运的是,有一个Polyfill可以完成这项工作。
var initialString = "Something or other";
var utf8EncodedString = new TextEncoder("utf-8").encode(initialString);
// utf8EncodedString is a Uint8Array, so you can inspect
// the individual bytes directly:
for (var i = 0; i < utf8EncodedString.length; ++i) {
console.log(utf8EncodedString[i]);
}
var decodedString = new TextDecoder("utf-8").decode(utf8EncodedString);
if (initialString !== decodedString) {
console.error("You're lying!");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6377 次 |
最近记录: |