Co když jsou binární data ve skutečnosti řetězec? Například když obdržíme soubor s textovými daty.
Vestavěný objekt TextDecoder nám umožní načíst hodnotu do skutečného JavaScriptového řetězce, když uvedeme buffer a kódování.
Nejprve jej musíme vytvořit:
let dekodér = new TextDecoder([kódování], [volby]);
kódování– kódování, standardněutf-8, ale podporována jsou ibig5,windows-1251a mnoho dalších.volby– nepovinný objekt:fatal– booleovská hodnota, pokud jetrue, pak se pro neplatné (nerozkódovatelné) znaky vyhodí výjimka, jinak (standardně) budou nahrazeny znakem\uFFFD.ignoreBOM– booleovská hodnota, pokud jetrue, pak se ignoruje BOM (nepovinný znak pořadí bytů v Unicode), je potřeba jen zřídka.
…A pak dekódujeme:
let řetězec = dekodér.decode([vstup], [volby]);
vstup–BufferSourcek dekódování.volby– nepovinný objekt:stream–truepři dekódování proudů, kdy jedekodérvolán opakovaně pro přicházející bloky dat. V takovém případě může být znak, zakódovaný ve více bytech, občas rozdělen mezi jednotlivé bloky. Tato volba říká, že siTextDecodermá pamatovat „nedokončené“ znaky a dekódovat je, až přijde další blok.
Příklad:
let uint8Array = new Uint8Array([65, 104, 111, 106]);
alert( new TextDecoder().decode(uint8Array) ); // Ahoj
let uint8Array = new Uint8Array([228, 189, 160, 229, 165, 189]);
alert( new TextDecoder().decode(uint8Array) ); // 你好
Chceme-li dekódovat jen část bufferu, můžeme pro ni vytvořit náhled z podpole:
let uint8Array = new Uint8Array([0, 65, 104, 111, 106, 0]);
// řetězec je uprostřed
// vytvoříme nad ním nový náhled, aniž bychom něco kopírovali
let binárníŘetězec = uint8Array.subarray(1, -1);
alert( new TextDecoder().decode(binárníŘetězec) ); // Ahoj
TextEncoder
TextEncoder provádí opak – převádí řetězec na byty.
Jeho syntaxe je:
let kodér = new TextEncoder();
Jediné kódování, které podporuje, je utf-8.
Má dvě metody:
encode(řetězec)– vrátíUint8Arrayz řetězce.encodeInto(řetězec, cíl)– zakódujeřetězecdo objektucíl, kterým musí býtUint8Array.
let kodér = new TextEncoder();
let uint8Array = kodér.encode("Ahoj");
alert(uint8Array); // 65,104,111,106
Komentáře
<code>, pro několik řádků je obalte značkou<pre>, pro více než 10 řádků vložte odkaz na pískoviště (plnkr, jsbin, codepen…)