gpt4 book ai didi

javascript - 从 Uint8Array 转换为字符串并返回

转载 作者:行者123 更新时间:2023-12-03 19:34:22 25 4
gpt4 key购买 nike

我在从特定的 Uint8Array 转换为字符串并返回时遇到问题。我在浏览器和 Chrome 中工作,它 native 支持 TextEncoder/TextDecoder 模块。

如果我从一个简单的案例开始,一切似乎都运行良好:

const uintArray = new TextEncoder().encode('silly face demons');
// Uint8Array(17) [115, 105, 108, 108, 121, 32, 102, 97, 99, 101, 32, 100, 101, 109, 111, 110, 115]
new TextDecoder().decode(uintArray); // silly face demons

但是下面的案例并没有给我我期望的结果。在不涉及太多细节(它与密码学相关)的情况下,让我们从提供以下 Uint8Array 的事实开始:
Uint8Array(24) [58, 226, 7, 102, 202, 238, 58, 234, 217, 17, 189, 208, 46, 34, 254, 4, 76, 249, 169, 101, 112, 102, 140, 208]
我想要做的是将其转换为字符串,然后将字符串解密回原始数组,但我得到了这个:

const uintArray = new Uint8Array([58, 226, 7, 102, 202, 238, 58, 234, 217, 17, 189, 208, 46, 34, 254, 4, 76, 249, 169, 101, 112, 102, 140, 208]);
new TextDecoder().decode(uint8Array); // :�f��:����."�L��epf��
new TextEncoder().encode(':�f��:����."�L��epf��');

...导致:Uint8Array(48) [58, 239, 191, 189, 7, 102, 239, 191, 189, 239, 191, 189, 58, 239, 191, 189, 239, 191, 189, 17, 239, 191, 189, 239, 191, 189, 46, 34, 239, 191, 189, 4, 76, 239, 191, 189, 239, 191, 189, 101, 112, 102, 239, 191, 189, 239, 191, 189]
数组增加了一倍。编码有点超出我的驾驶室。谁能告诉我为什么数组翻了一番(我假设它是原始数组的替代表示......?)。另外,更重要的是,有没有一种方法可以让我回到原来的数组(即,将我得到的数组翻倍)?

最佳答案

您尝试将数组中的代码点转换为 utf-8没有意义或不允许的。几乎所有东西>= 128需要特殊处理。其中一些是允许的,但它们是多字节序列的前导字节,有些像 254只是不允许。如果您想来回转换,您需要确保创建有效的 utf-8 .这里的代码页布局可能有用:https://en.wikipedia.org/wiki/UTF-8#Codepage_layout就像非法字节序列的描述一样:https://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences .

作为一个具体的例子,这个:

let arr = new TextDecoder().decode(new Uint8Array([194, 169]))
let res = new TextEncoder().encode(arr) // => [194, 168]

之所以有效,是因为 [194, 169]对于 © 是有效的 utf-8,但是:
let arr = new TextDecoder().decode(new Uint8Array([194, 27]))
let res = new TextEncoder().encode(arr) // => [239, 191, 189, 27]

不是因为它不是一个有效的序列。

关于javascript - 从 Uint8Array 转换为字符串并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51371648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com