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 Long polling
JavaScript Walking the DOM
JavaScript Arrays
JavaScript Error handling, "try...catch"
JavaScript Garbage collection
JavaScript Strings
JavaScript XMLHttpRequest
JavaScript Mixins
JavaScript Ninja code
JavaScript Loops: while and for
JavaScript BigInt
JavaScript Introduction: callbacks
JavaScript Type Conversions
JavaScript Shadow DOM
JavaScript Prototype methods, objects without __proto__
JavaScript Server Sent Events
JavaScript Recursion and stack
JavaScript Polyfills and transpilers
JavaScript Scheduling: setTimeout and setInterval
JavaScript F.prototype
JavaScript Scripts: async, defer
JavaScript Object.keys, values, entries
JavaScript Selection and Range
JavaScript Backreferences in pattern: \N and \k
JavaScript Lookahead and lookbehind
JavaScript Popups and window methods
JavaScript Async iteration and generators
JavaScript Object methods, "this"
JavaScript Events: change, input, cut, copy, paste
JavaScript ArrayBuffer, binary arrays
JavaScript Variables
JavaScript Styles and classes