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 Class inheritance
JavaScript specials
JavaScript Error handling, "try...catch"
JavaScript WebSocket
JavaScript Sets and ranges [...]
JavaScript Decorators and forwarding, call/apply
JavaScript Scrolling
JavaScript Events: change, input, cut, copy, paste
JavaScript Window sizes and scrolling
JavaScript Mixins
JavaScript Async iteration and generators
JavaScript Type Conversions
JavaScript Event loop: microtasks and macrotasks
JavaScript Capturing groups
JavaScript Extending built-in classes
JavaScript Forms: event and method submit
JavaScript Global object
JavaScript Error handling with promises
JavaScript Object.keys, values, entries
JavaScript Generators
JavaScript Character classes
JavaScript Pointer events
JavaScript Long polling
JavaScript Coordinates
JavaScript Scripts: async, defer
JavaScript Object references and copying
JavaScript Anchors: string start ^ and end $
JavaScript Object to primitive conversion
JavaScript Nullish coalescing operator '??'
JavaScript Browser environment, specs
JavaScript Garbage collection
JavaScript Scheduling: setTimeout and setInterval