1. let decoder = new TextDecoder([label], [options]);
  • label——编码格式,默认是 utf-8。
  • options——选项对象
    • fatal——一个布尔值。为 true 时,遇到无效、不可破解的字符时会抛错,否则(默认)将其替换成字符 \uFFFD。
    • ignoreBOM——布尔值。为 true 时,表示忽略 BOM(一个可选的字节顺序 unicode 标记),很少使用。

解码:

  1. let str = decoder.decode([input], [options]);
  • input——要解码的 BufferSource。
  • options——选项对象
    • stream

例子:

  1. let uint8Array = new Uint8Array([72, 101, 108, 108, 111]);
  2. alert( new TextDecoder().decode(uint8Array) ); // Hello
  1. let uint8Array = new Uint8Array([228, 189, 160, 229, 165, 189]);
  2. alert( new TextDecoder().decode(uint8Array) ); // 你好

我们可以解码 buffer 的一部分,为它创建一个子数组视图:

  1. let uint8Array = new Uint8Array([0, 72, 101, 108, 108, 111, 0]);
  2. // 字符串隐藏在这些字节中间
  3. // 基于 uint8Array 的底层 buffer 创建一个新的 view 对象,没有复制操作
  4. let binaryString = uint8Array.subarray(1, -1);
  5. alert( new TextDecoder().decode(binaryString) ); // Hello

TextEncoder

TextEncoder 将字符串转为字节码。

语法:

  1. let encoder = new TextEncoder();

仅支持“utf-8”编码格式。

包含两个方法:

  • encode(srr)
  • encodeInto(str, destination)
  1. let encoder = new TextEncoder();
  2. let uint8Array = encoder.encode("Hello");
  3. alert(uint8Array); // 72,101,108,108,111