当前位置: 首页 > 面试题库 >

JavaScript在字符串和ArrayBuffers之间转换

高自怡
2023-03-14
问题内容

是否存在一种普遍接受的技术,可以有效地将JavaScript字符串转换为ArrayBuffers,反之亦然?具体来说,我希望能够将ArrayBuffer的内容写入localStorage并读回。


问题答案:

更新 -五年来,规范中现在有了新方法(请参阅下面的支持),可以使用正确的编码在字符串和类型数组之间进行转换。

TextEncoder

TextEncoder代表:

TextEncoder接口表示用于特定方法的编码器,即特定的字符编码,例如utf-8 iso-8859-2koi8
cp1261gbk,…
编码器将代码点流作为输入,并发出字节流。

由于上述内容而编写的变更说明:( 同上)

注意: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-8iso-8859-2koi8
cp1261gbk,…的解码器需要一个字节流作为输入,并且发射的码点流。

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));

MDN StringView库

一种替代方法是使用该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


 类似资料:
  • 问题内容: 有谁知道如何将a转换为Base64字符串,然后将其反转? 我有以下代码;编码之前的原始图像是好的,但是编码和解码后我只能得到空白图像。 问题答案: 迅速 首先我们需要有图像的NSData Swift 2.0 >编码 Swift 2.0 >解码 Swift 3.0 >解码 编码方式 : 解码 : 斯威夫特3.0 目标C iOS7>版本 您可以使用 编码方式 : 解码 : iOS 6.1和

  • 问题内容: 我正在使用hibernate将对象映射到数据库。客户端(iOS应用程序)向我发送JSON格式的特定对象,我使用以下实用程序方法将其转换为真实的表示形式 但是问题是,在我的pogo中,我将值存储为byte [],如下所示(因为这是存储在数据库中的内容-blob) 当然,现在转换失败了,因为它无法在byte []和String之间进行转换。 这是更改构造函数以接受String而不是字节数组

  • 问题内容: 我正在使用休眠将对象映射到数据库。客户端(iOS应用程序)向我发送了JSON格式的特定对象,我使用以下实用程序方法将其转换为真实的表示形式 但是问题是,在我的pogo中,我将值存储为byte [],如下所示(因为这是存储在数据库中的内容-blob) 当然,现在转换失败了,因为它无法在byte []和String之间进行转换。 这是更改构造函数以接受String而不是字节数组,然后在设置

  • 问题内容: 如何在JavaScript中执行以下操作? 将“ 1”,“ 2”,“ 3”连接为“ 123” 将“ 123”转换为123 加123 + 100 = 223 将223转换为“ 223” 问题答案: 您想熟悉和。 在您的工具箱中有用的是查看变量以找出它是什么类型的:

  • 问题内容: 我一直在纠缠于ECMA-262标准( ECMAScript语言规范, 第三版,如果对此很重要- 在字符串类型/字符串对象的第三版和第五版之间,我没有发现任何区别)。 有件事让我感到困惑:字符串类型和字符串对象之间的区别。是的,我知道 字符串类型 是16位UTF-16单元序列, 字符串对象 是内置对象,其内部 Class 属性设置为“ String”,内部 Value 属性设置为的意义上

  • 本文向大家介绍详解python 字符串和日期之间转换 StringAndDate,包括了详解python 字符串和日期之间转换 StringAndDate的使用技巧和注意事项,需要的朋友参考一下 python 字符串和日期之间转换 StringAndDate           这里给出实现代码,直接可以使用。大家可以看下。 实例代码: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!