JavaScript在字符串和ArrayBuffers之间转换
是否存在一种普遍接受的技术,可以有效地将JavaScript字符串转换为ArrayBuffers,反之亦然?具体来说,我希望能够将ArrayBuffer的内容写入localStorage
并读回。
回答:
-五年来,规范中现在有了新方法(请参阅下面的支持),可以使用正确的编码在字符串和类型数组之间进行转换。
回答:
该TextEncoder
代表:
该
TextEncoder
接口表示用于特定方法的编码器,即特定的字符编码,例如utf-8
,iso-8859-2
,koi8
,
cp1261
,gbk
,… 编码器将代码点流作为输入,并发出字节流。
同上)
注意:Firefox,Chrome和Opera曾经支持utf-8以外的其他编码类型(例如utf-16,iso-8859-2,koi8,cp1261和gbk)。自Firefox
48,Chrome 54和Opera 41起,为了符合规范,除utf-8以外没有其他可用的编码类型。
创建的实例后,TextEncoder
它将使用一个字符串并使用给定的编码参数对其进行编码:
if (!("TextEncoder" in window)) alert("Sorry, this browser does not support TextEncoder...");
var enc = new TextEncoder(); // always utf-8
console.log(enc.encode("This is a string converted to a Uint8Array"));
然后,您当然可以在.buffer
结果上使用参数,以根据Uint8Array
需要将参考底图转换ArrayBuffer
为其他视图。
只需确保字符串中的字符符合编码模式即可,例如,如果在示例中使用UTF-8范围以外的字符,它们将被编码为两个字节,而不是一个字节。
对于一般用途,您可以将UTF-16编码用于localStorage
。
回答:
同样,相反的过程使用TextDecoder
:
的
TextDecoder
接口表示为具体的方法,即一个特定的字符编码,如解码器utf-8
,iso-8859-2
,koi8
,
cp1261
,gbk
,…的解码器需要一个字节流作为输入,并且发射的码点流。
if (!("TextDecoder" in window)) alert("Sorry, this browser does not support TextDecoder...");
var enc = new TextDecoder("utf-8");
var arr = new Uint8Array([84,104,105,115,32,105,115,32,97,32,85,105,110,116,
56,65,114,114,97,121,32,99,111,110,118,101,114,116,
101,100,32,116,111,32,97,32,115,116,114,105,110,103]);
console.log(enc.decode(arr));
回答:
一种替代方法是使用该StringView
库(许可为lgpl-3.0),其目标是:
- 基于JavaScript ArrayBuffer接口为字符串(即,字符代码数组—
JavaScript中的ArrayBufferView)创建类似C的接口
- 创建一个高度可扩展的库,任何人都可以通过向对象StringView.prototype添加方法来扩展
*
为此类类似字符串的对象创建方法的集合(从现在开始:stringViews),这些对象严格地用于数字数组,而不是创建新的不可变JavaScript字符串
- 与JavaScript的默认UTF-16 DOMStrings以外的Unicode编码一起使用
提供更大的灵活性。但是,当TextEncoder
/ TextDecoder
在现代浏览器中内置时,要求我们链接或嵌入该库。
支持
截至2018年7月:
TextEncoder
(实验,按标准进行)
Chrome | Edge | Firefox | IE | Opera | Safari ----------|-----------|-----------|-----------|-----------|-----------
38 | ? | 19° | - | 25 | -
Chrome/A | Edge/mob | Firefox/A | Opera/A |Safari/iOS | Webview/A
----------|-----------|-----------|-----------|-----------|-----------
38 | ? | 19° | ? | - | 38
°) 18: Firefox 18 implemented an earlier and slightly different version
of the specification.
WEB WORKER SUPPORT:
Experimental, On Standard Track
Chrome | Edge | Firefox | IE | Opera | Safari
----------|-----------|-----------|-----------|-----------|-----------
38 | ? | 20 | - | 25 | -
Chrome/A | Edge/mob | Firefox/A | Opera/A |Safari/iOS | Webview/A
----------|-----------|-----------|-----------|-----------|-----------
38 | ? | 20 | ? | - | 38
Data from MDN - `npm i -g mdncomp` by epistemex
以上是 JavaScript在字符串和ArrayBuffers之间转换 的全部内容, 来源链接: utcz.com/qa/435620.html