Ce face TextEncoder / TextDecoder
TextEncoder.encode returnează un Uint8Array cu octeții UTF-8 ai textului. Literele englezești ocupă un octet, diacriticele românești două, iar emoji-urile patru, deci numărul de octeți poate fi mai mare decât length.
encodeInto scrie direct într-un Uint8Array existent și returnează { read, written }. TextDecoder face operația inversă și poate citi și alte codificări (de exemplu "windows-1250", folosită de fișierele românești vechi). Cu { fatal: true } aruncă eroare la octeți invalizi în loc să pună �.
Parametri
| Parametru | Descriere |
|---|---|
text |
Textul codificat. |
octeti |
Un Uint8Array, ArrayBuffer sau DataView. |
Ce returnează
encode: un Uint8Array. decode: un text.
Exemple
Exemplul 1: Octeți față de caractere
const enc = new TextEncoder();
for (const text of ["Iasi", "Iași", "Iași 👍"]) {
console.log(text, text.length, enc.encode(text).length);
}
console.log(enc.encode("ș"));
Rezultat
Iasi 4 4
Iași 4 5
Iași 👍 7 10
Uint8Array(2) [ 200, 153 ]
Exemplul 2: Decodificare și encodeInto
În ultimul rând, „ș” are nevoie de doi octeți, dar în tablou mai era loc doar pentru unul, așa că encodeInto s-a oprit după „Bra” (3 caractere citite, 3 octeți scriși).
const octeti = new Uint8Array([84, 105, 109, 105, 200, 153, 111, 97, 114, 97]);
console.log(new TextDecoder().decode(octeti));
const veche = new Uint8Array([66, 114, 227, 105, 108, 97]);
console.log(new TextDecoder("windows-1250").decode(veche));
const tinta = new Uint8Array(4);
console.log(new TextEncoder().encodeInto("Brașov", tinta), tinta);
Rezultat
Timișoara
Brăila
{ read: 3, written: 3 } Uint8Array(4) [ 66, 114, 97, 0 ]
Greșeli frecvente
- Limitezi un text la „255 de octeți” (de exemplu pentru o bază de date) folosind
length. Diacriticele ocupă câte doi octeți; măsoară cunew TextEncoder().encode(text).length.
Comenzi înrudite
Uint8Array.prototype.toBase64 / fromBase64: Transformă octeți în text Base64 și înapoi, direct, fără btoa și atob.btoa / atob (Base64): Codifică un text în Base64 (btoa) și îl decodifică (atob); atenție la diacritice.Typed arrays (Uint8Array, Float64Array...): Tablouri de lungime fixă cu numere de un singur tip, pentru date binare: imagini, fișiere, audio, rețea.