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 Object references and copying
JavaScript LocalStorage, sessionStorage
JavaScript Class basic syntax
JavaScript Data types
JavaScript Browser default actions
JavaScript Property flags and descriptors
JavaScript Array methods
JavaScript Mouse events
JavaScript Window sizes and scrolling
JavaScript Introduction to browser events
JavaScript Word boundary: \b
JavaScript Character classes
JavaScript animations
JavaScript Escaping, special characters
JavaScript Dynamic imports
JavaScript Searching: getElement*, querySelector*
JavaScript Interaction: alert, prompt, confirm
JavaScript Object to primitive conversion
JavaScript Greedy and lazy quantifiers
JavaScript Page: DOMContentLoaded, load, beforeunload, unload
JavaScript Sticky flag "y", searching at position
JavaScript Comparisons
JavaScript Lookahead and lookbehind
JavaScript Async/await
JavaScript Popups and window methods
JavaScript Event delegation
JavaScript Cross-window communication
JavaScript Debugging in the browser
JavaScript ArrayBuffer, binary arrays
JavaScript Prototype methods, objects without __proto__
JavaScript Decorators and forwarding, call/apply
JavaScript FormData