Table of Contents
1. Overview
What if the binary data is actually a string? For instance, we received a file with textual data.
The build-in TextDecoder object allows to read the value into an actual JavaScript string, given the buffer and the encoding.
We first need to create it:
let decoder = new TextDecoder([label], [options]);
label– the encoding,utf-8by default, butbig5,windows-1251and many other are also supported.options– optional object:fatal– boolean, iftruethen throw an exception for invalid (non-decodable) characters, otherwise (default) replace them with character\uFFFD.ignoreBOM– boolean, iftruethen ignore BOM (an optional byte-order Unicode mark), rarely needed.
…And then decode:
let str = decoder.decode([input], [options]);
input–BufferSourceto decode.options– optional object:stream– true for decoding streams, whendecoderis called repeatedly with incoming chunks of data. In that case a multi-byte character may occasionally split between chunks. This options tellsTextDecoderto memorize “unfinished” characters and decode them when the next chunk comes.
For instance:
let uint8Array = new Uint8Array([72, 101, 108, 108, 111]); alert( new TextDecoder().decode(uint8Array) ); // Hello
let uint8Array = new Uint8Array([228, 189, 160, 229, 165, 189]); alert( new TextDecoder().decode(uint8Array) ); // 你好
We can decode a part of the buffer by creating a subarray view for it:
let uint8Array = new Uint8Array([0, 72, 101, 108, 108, 111, 0]); // the string is in the middle // create a new view over it, without copying anything let binaryString = uint8Array.subarray(1, -1); alert( new TextDecoder().decode(binaryString) ); // Hello
2. TextEncoder
TextEncoder does the reverse thing – converts a string into bytes.
The syntax is:
let encoder = new TextEncoder();
The only encoding it supports is “utf-8”.
It has two methods:
encode(str)– returnsUint8Arrayfrom a string.encodeInto(str, destination)– encodesstrintodestinationthat must beUint8Array.
let encoder = new TextEncoder();
let uint8Array = encoder.encode("Hello");
alert(uint8Array); // 72,101,108,108,111
Related posts:
JavaScript Date and time
JavaScript The clickjacking attack
JavaScript Map and Set
Export and Import
JavaScript Numbers
JavaScript Modifying the document
JavaScript Rest parameters and spread syntax
JavaScript WebSocket
JavaScript The "new Function" syntax
JavaScript Object to primitive conversion
JavaScript Comparisons
JavaScript Code editors
JavaScript The modern mode, "use strict"
JavaScript Lookahead and lookbehind
JavaScript Optional chaining '?.'
JavaScript XMLHttpRequest
JavaScript Page: DOMContentLoaded, load, beforeunload, unload
JavaScript Selection and Range
JavaScript Form properties and methods
JavaScript Resource loading: onload and onerror
JavaScript JSON methods, toJSON
JavaScript Focusing: focus/blur
JavaScript Moving the mouse: mouseover/out, mouseenter/leave
JavaScript Async/await
JavaScript Drag'n'Drop with mouse events
JavaScript Keyboard: keydown and keyup
Get Started With Node: An Introduction To APIs, HTTP And ES6+ JavaScript
JavaScript Shadow DOM and events
JavaScript Scripts: async, defer
JavaScript Modules, introduction
JavaScript Shadow DOM
JavaScript Code structure