А якщо бінарні дані є просто рядком? Наприклад, ми отримали файл з текстовими даними.
Вбудований об’єкт TextDecoder дає змогу записати дані в JavaScript рядок із заданого буферу з потрібним кодуванням.
Але для початку його необхідно створити:
let decoder = new TextDecoder([label], [options]);
label– кодування, типовоutf-8, але також підтримуютьсяbig5,windows-1251та багато інших кодувань.options– необов’язковий об’єкт, який задає додаткові налаштування декодера:fatal– булевий параметр, якщо переданоtrue– буде згенеровано виключення для символів, які не вдасться декодувати, в іншому випадку (типово) вони будуть замінені на символ\uFFFD.ignoreBOM– булевий параметр, якщо переданоtrue– буде проігноровано BOM (Byte order mark — необов’язковий маркер порядку байтів), рідко трапляється в нагоді.
…А потім декодувати:
let str = decoder.decode([input], [options]);
input–BufferSourceбуфер для декодування.options– необов’язковий об’єкт:stream– значенняtrue, якщо потрібно декодувати потік (stream), тодіdecoderбуде викликано повторно декілька разів для отримання вхідних даних частинами. В такому випадку символи, що складають з декількох байт можуть бути випадково розділеними між частинами. Ця опція дозволяєTextDecoderзапам’ятати “незакінчені” символи для декодування разом з наступною частиною.
Наприклад:
Також можливо частково декодувати буфер за допомогою створення представлення тільки з частиною масиву:
TextEncoder
TextEncoder працює зворотнім чином – перетворює рядок в байти.
Синтаксис:
let encoder = new TextEncoder();
Підтримується тільки кодування “utf-8”.
Об’єкт має два методи:
encode(str)– повертаєUint8Arrayстворений з рядку.encodeInto(str, destination)–strбуде закодовано та записано вdestination. Параметрdestinationповинен мати типUint8Array.