String 编码和解码

TextEncoder

  • 构造函数

    1
    const encoder = new TextEncoder();

    根据指定的编码格式生成 encoder 实例

    Firefox 48Chrome 53 之后的版本为了与 规范 保持一致,构造函数不需要传递参数,默认的编码格式为 UTF-8,即使传了其他的编码格式,也会调整为 UTF-8;可以通过 polyfill 库,补充不支持的编码格式

  • encoding

    1
    new TextEncoder().encoding; // 'utf-8'

    只读属性,返回指定的编码格式

  • encode()

    1
    new TextEncoder() . encode([input = ""])

    返回编码后的字符对象(Unit8Array 格式)

TextDecoder

  • 构造函数

    1
    decoder = new TextDecoder([label = "utf-8" [, options]])

    根据指定的解码格式生成 decoder 实例

    如果提供未知或模棱两可的解码格式 ,会报 RangeError

    options:包含 fatalignoreBOM 属性的 TextDecoderOptions 对象

    fatal:布尔值,指明在解码过程中发生的错误是否需要抛出,默认为 false

    ignoreBOM:布尔值,是否忽略字节顺序标记(Byte Order Mark)

  • fatal

    1
    new TextDecoder().fatal;

    只读属性,指明在解码过程中发生的错误是否需要抛出

  • ignoreBOM

    1
    new TextDecoder().ignoreBOM;

    只读属性,是否忽略字节顺序标记

  • decode()

    1
    new TextDecoder().decode([input [, options]]);

    根据指定的解码方式对编码数据进行解码,并返回解码后的字符串数据

    input:需要解码的数据(ArrayBuffer 格式或 ArrayBufferView 格式)

    options:包含 stream 属性的 TextDecodeOptions 对象

    stream:布尔值,是否需要解码额外的数据

1
2
3
4
5
6
7
const text = 'hello word';

const encode_text = new TextEncoder().encode(text);

const decode_text = new TextDecoder('utf-8', {fatal: true}).decode(encode_text);

console.info(Object.is(text, decode_text)); // true

兼容性

浏览器支持情况
IE8 ~ IE11不支持
Edge暂不支持,在 开发阶段
Chrome支持
Firefox支持
Safari10.1+ 版本支持

兼容代码

待善对中文的兼容

  • encode

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function encode(text){
    const textString = String(text),
    textArray = textString.split('');

    for (let i = 0; i < textArray.length; i++) {
    textArray[i] = textArray[i].charCodeAt(0)
    };

    return new Uint8Array(textArray);
    }

    mark

  • decode

    1
    2
    3
    4
    5
    6
    function decode(textBuffer){
    const textArray = Array.from(new Uint8Array(textBuffer)),
    textHex = textArray.map(b => ('00' + b.toString(16)).slice(-2)).join('');

    return unescape(textHex.replace(/(..)/g,"%$1"));
    }

    mark

参考资料