Que faire si les données binaires sont en fait une chaîne de charactères ? Par exemple, nous avons reçu un fichier contenant des données textuelles.
Lâobject interne TextDecoder permet de lire la valeur dans une chaîne JavaScript réelle, compte tenu du buffer et de lâencodage.
Nous devons dâabord le créer:
let decoder = new TextDecoder([label], [options]);
labelâ lâencodage,utf-8par défaut, maisbig5,windows-1251et bien dâautres sont également pris en charge.optionsâ objet optionnel :fatalâ boolean, sitrueune exception pour les caractères invalides (non décodables) est lancé, sinon (par défaut) remplacez-les par un caractère\uFFFD.ignoreBOMâ boolean, sitrueignore la BOM (une marque unicode facultative dâordre des octets), rarement nécessaire.
â¦Et puis décoder:
let str = decoder.decode([input], [options]);
inputâSource du bufferà décoder.optionsâ objet optionnel:streamâ vrai pour les flux de décodage, lorsquedecoderest appelé à plusieurs reprises avec des blocs de données entrants. Dans ce cas, un caractère multi-octets peut parfois être divisé entre des morceaux. Cette option indique ÃTextDecoderde mémoriser les caractères" inachevés "et de les décoder lorsque le morceau suivant arrive.
Par exemple:
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) ); // ä½ å¥½
Nous pouvons décoder une partie du Buffer en créant une vue de sous-tableau pour celui-ci:
let uint8Array = new Uint8Array([0, 72, 101, 108, 108, 111, 0]);
// la chaîne de charactères est au milieu
// créer une nouvelle vue, sans rien copier
let binaryString = uint8Array.subarray(1, -1);
alert( new TextDecoder().decode(binaryString) ); // Hello
TextEncoder
TextEncoder fait la chose inverse â convertit une chaîne de charactères en bytes.
La syntaxe est:
let encoder = new TextEncoder();
Le seul encodage quâil prend en charge est lââutf-8â.
Il a deux méthodes:
encode(str)â prend une chaîne de charactères et renvoie unUint8Array.encodeInto(str, destination)â encodestrdansdestination(qui doit être unUint8Array).
let encoder = new TextEncoder();
let uint8Array = encoder.encode("Hello");
alert(uint8Array); // 72,101,108,108,111
Commentaires
<code>, pour plusieurs lignes â enveloppez-les avec la balise<pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepenâ¦)