TextEncoder / TextDecoder în JavaScript

Fișiere și criptografie Browserele moderne, Node.js 11+

Transformă textul în octeți UTF-8 (encode) și octeții înapoi în text (decode).

Sintaxă
new TextEncoder().encode(text)
new TextEncoder().encodeInto(text, octeti)
new TextDecoder("utf-8").decode(octeti)

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ă cu new TextEncoder().encode(text).length.

Comenzi înrudite