如何将JavaScript中的字符串转换为字节序列?

时间:2017-11-10 03:42:44

标签: javascript string

在Python 3中,要将字符串转换为字节序列,可以使用a,其中String.encode(ENCODING)是要使用的编码的名称。如果我的字符串中有一个代码点大于255的字符,那么它仍将被转换为字节数组。如果需要对字符串进行操作(例如密码演示),这将非常有用。可以使用ENCODING重新构建文本。

我还没有看到任何与JavaScript相似的内容。有ByteArray.decode(ENCODING),但这会将String.charCodeAt()之类的字符转换为Ā。那不是我想要的。

3 个答案:

答案 0 :(得分:1)

您可以使用TextEncoder() .encode()TextDecoder() .decode()方法

let decoder = new TextDecoder(/* character encoding */);
let encoder = new TextEncoder();

let encoded = encoder.encode(str);
let decoded = decoder.decode(encoded);

答案 1 :(得分:0)

您可以使用标准FileReader直接读取字节:

var str = "Āabc";
var b = new Blob([str], {type:"text/plain"});
var f = new FileReader();
f.addEventListener("loadend", function(){
    console.log(new Uint8Array(f.result));    // [196, 128, 97, 98, 99]
});
f.readAsArrayBuffer(b);

答案 2 :(得分:0)

“对字符串进行操作......密码”:可能不是。

密码是字节数组的数学转换。加密的结果不是文本,因此不能直接存储在字符串中。

JavaScript字符串是UTF-16代码单元的计数序列。 (也适用于VB4 / 5/6,VB,VBA,VBScript,C#,Java ......)UTF-16是Unicode字符集的几种编码之一。 UTF-8是另一个。既不对任意二进制数据进行编码/解码。

您提到了String.charCodeAt()。这只是给你一个字符串中的UTF-16代码单元。

在字符串中携带和显示二进制数据的常用方法是Base64和十六进制。这种方式有点重 - 发送者和接收者必须同意字符串的字符编码和二进制到文本转换 - 但许多系统宁愿传递文本而不是二进制。