# 二进制数据-字符串

如果二进制数据实际上是一个字符串怎么办?例如,我们收到了一个包含文本数据的文件。

# TextDecoder

内建的 TextDecoder 对象在给定缓冲区(buffer)和编码格式(encoding)的情况下,能够将值读取到实际的 JavaScript 字符串中。

首先我们需要创建:

let decoder = new TextDecoder([label], [options]);
  • label —— 编码格式,默认为 utf-8,但同时也支持 big5,windows-1251 等许多其他编码格式
  • options —— 可选对象

……然后解码:


let str = decoder.decode([input], [options]);
  • input —— 要被解码的 BufferSource
  • options —— 可选对象 { stream: true } —— 对于解码流,为 true,则将传入的数据块(chunk)作为参数重复调用 decoder

let uint8Array = new Uint8Array([72, 101, 108, 108, 111]);

alert(new TextDecoder().decode(uint8Array)); // Hello

有时我们收到了一大块数据,但我们不想一次性解码出来,我们可以通过为其创建子数组视图来解码部分缓冲区:

let uint8Array = new Uint8Array([0, 72, 101, 108, 108, 111, 0]);
// 该字符串位于中间
// 在不复制任何内容的前提下,创建一个新的视图
let binaryString = uint8Array.subarray(1, -1);
alert(new TextDecoder().decode(binaryString)); // Hello

# TextEncoder

TextEncoder 做相反的事情 —— 将字符串转换为字节。

语法为:

let encoder = new TextEncoder();
let encoder = new TextEncoder();
let uint8Array = encoder.encode("Hello");
alert(uint8Array); // 72,101,108,108,111