Co když jsou binární data ve skutečnosti řetězec? Například jsme obdrželi soubor s textovými daty.
Vestavěný objekt TextDecoder umožňuje načíst hodnotu do skutečného řetězce JavaScriptu s ohledem na vyrovnávací paměť a kódování.
Nejprve jej musíme vytvořit:
let decoder = new TextDecoder([label], [options]);
label
– kódování,utf-8
ve výchozím nastavení, alebig5
,windows-1251
a mnoho dalších je také podporováno.options
– volitelný objekt:fatal
– boolean, pokudtrue
pak vyvolá výjimku pro neplatné (nedekódovatelné) znaky, jinak je (výchozí) nahraďte znakem\uFFFD
.ignoreBOM
– boolean, pokudtrue
pak ignorujte kusovník (volitelná značka Unicode pro pořadí bajtů), zřídka potřebná.
…A pak dekódujte:
let str = decoder.decode([input], [options]);
input
–BufferSource
k dekódování.options
– volitelný objekt:stream
– true pro dekódování streamů, kdyždecoder
se opakovaně volá s příchozími bloky dat. V takovém případě se může vícebajtový znak příležitostně rozdělit na části. Tato volba říkáTextDecoder
zapamatovat si „nedokončené“ znaky a dekódovat je, až přijde další díl.
Například:
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) ); // 你好
Část vyrovnávací paměti můžeme dekódovat tak, že pro ni vytvoříme pohled podpole:
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
TextEncoder
TextEncoder dělá obrácenou věc – převádí řetězec na bajty.
Syntaxe je:
let encoder = new TextEncoder();
Jediné kódování, které podporuje, je „utf-8“.
Má dvě metody:
encode(str)
– vrátíUint8Array
ze řetězce.encodeInto(str, destination)
– kódujestr
dodestination
to musí býtUint8Array
.
let encoder = new TextEncoder();
let uint8Array = encoder.encode("Hello");
alert(uint8Array); // 72,101,108,108,111