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.
<<<<<<< HEAD L'object TextDecoder permet de lire la valeur dans une chaîne de charactères, en donnant le Buffer et l'encodage.
The built-in TextDecoder object allows one to read the value into an actual JavaScript string, given the buffer and the encoding.
193319c963b9ba86ac7d9590f7261a36ecdcc4d2
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) ); // Hellolet 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) ); // HelloTextEncoder 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