TextDecoder
и TextEncoder
предназначены для работы с текстом .
Чтобы преобразовать произвольную последовательность байтов в строку и обратно, лучше обрабатывать каждый байт как один символ.
var arrayBuff = Memory.readByteArray(pointer,2000); //Get a 2,000 byte ArrayBuffer
console.log(arrayBuff.byteLength); //Always returns 2,000
//Decode and encode same data without making any changes
var decoded = String.fromCharCode(...new Uint8Array(arrayBuff));
var encoded = Uint8Array.from([...decoded].map(ch => ch.charCodeAt())).buffer;
console.log(encoded.byteLength);
Строка decoded
будет иметь точно такую же длину, что и входной буфер, и ее можно легко манипулировать с помощью регулярных выражений, строковых методов и т. Д. Но следует помнить, что символы Юникода, которые занимают два или более байтов в памяти (например, «π») ) больше не будет распознаваться, так как они приведут к объединению символов, соответствующих коду каждого отдельного байта.