¿Qué pasa si los datos binarios son en realidad un string? Por ejemplo, recibimos un archivo con datos textuales.
El objeto incorporado TextDecoder nos permite leer el valor y convertirlo en un string de JavaScript, dados el búfer y la codificación.
Primero necesitamos crearlo:
let decoder = new TextDecoder([label], [options]);
label– la codificación,utf-8por defecto, perobig5,windows-1251y muchos otros también son soportados.options– objeto opcional:fatal– booleano, si estruearroja una excepción por caracteres inválidos (no-decodificable), de otra manera (por defecto) son reemplazados con el carácter\uFFFD.ignoreBOM– booleano, si estrueentonces ignora BOM (una marca Unicode de orden de bytes opcional), raramente es necesario.
…Y luego decodificar:
let str = decoder.decode([input], [options]);
input–BufferSourcepara decodificar.options– objeto opcional:stream– true para decodificación de secuencias, cuando eldecoderes usado repetidamente para fragmentos de datos entrantes. En ese caso, un carácter de varios bytes puede ocasionalmente dividirse entre fragmentos. Esta opción le dice alTextDecoderque memorice caracteres “incompletos” y que los decodifique cuando venga el siguiente fragmento.
Por ejemplo:
let uint8Array = new Uint8Array([72, 111, 108, 97]);
alert( new TextDecoder().decode(uint8Array) ); // Hola
let uint8Array = new Uint8Array([228, 189, 160, 229, 165, 189]);
alert( new TextDecoder().decode(uint8Array) ); // 你好
Podemos decodificar una parte del búfer al crear una vista de sub arreglo para ello:
let uint8Array = new Uint8Array([0, 72, 111, 108, 97, 0]);
// El string esta en medio
// crear una nueva vista sobre el string, sin copiar nada
let binaryString = uint8Array.subarray(1, -1);
alert( new TextDecoder().decode(binaryString) ); // Hola
TextEncoder
TextEncoder hace lo contrario: convierte un string en bytes.
La sintaxis es:
let encoder = new TextEncoder();
La única codificación que soporta es “utf-8”.
Tiene dos métodos:
encode(str)– regresa un dato de tipoUint8Arrayde un string.encodeInto(str, destination)– codifica unstrendestination, este último debe ser de tipoUint8Array.
let encoder = new TextEncoder();
let uint8Array = encoder.encode("Hola");
alert(uint8Array); // 72,111,108,97
Comentarios
<code>, para varias líneas – envolverlas en la etiqueta<pre>, para más de 10 líneas – utilice una entorno controlado (sandbox) (plnkr, jsbin, codepen…)