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-8
by default, butbig5
,windows-1251
and many other are also supported.options
– optional object:fatal
– boolean, iftrue
then throw an exception for invalid (non-decodable) characters, otherwise (default) replace them with character\uFFFD
.ignoreBOM
– boolean, iftrue
then ignore BOM (an optional byte-order Unicode mark), rarely needed.
…And then decode:
let str = decoder.decode([input], [options]);
input
–BufferSource
to decode.options
– optional object:stream
– true for decoding streams, whendecoder
is called repeatedly with incoming chunks of data. In that case a multi-byte character may occasionally split between chunks. This options tellsTextDecoder
to 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)
– returnsUint8Array
from a string.encodeInto(str, destination)
– encodesstr
intodestination
that must beUint8Array
.
let encoder = new TextEncoder(); let uint8Array = encoder.encode("Hello"); alert(uint8Array); // 72,101,108,108,111
Related posts:
JavaScript Template element
JavaScript Iterables
JavaScript Hello, world!
JavaScript Loops: while and for
JavaScript Greedy and lazy quantifiers
JavaScript Prototypal inheritance
JavaScript Map and Set
JavaScript specials
JavaScript The old "var"
JavaScript Moving the mouse: mouseover/out, mouseenter/leave
JavaScript Reference Type
JavaScript Class inheritance
JavaScript URL objects
JavaScript Event loop: microtasks and macrotasks
JavaScript Shadow DOM
JavaScript Coordinates
JavaScript ArrayBuffer, binary arrays
JavaScript Walking the DOM
JavaScript Object to primitive conversion
JavaScript Object methods, "this"
JavaScript Optional chaining '?.'
JavaScript BigInt
JavaScript F.prototype
JavaScript Global object
JavaScript Quantifiers +, *, ? and {n}
JavaScript Styles and classes
JavaScript Code structure
JavaScript Events: change, input, cut, copy, paste
JavaScript Automated testing with Mocha
JavaScript Node properties: type, tag and contents
JavaScript Debugging in the browser
JavaScript Mouse events