JavaScript TextDecoder — байти в рядок


TextDecoder перетворює байти на рядок — і, на відміну від кодувальника, вміє не лише UTF-8.

автор: NagarD

Загальний опис

Саме тут ховається його головна цінність: він читає застарілі кодування. Файл у windows-1251 (а таких у наших краях досі вистачає) розкодується в нормальну кирилицю одним рядком — раніше для цього тягнули бібліотеки.

Другий випадок — потокове читання. Байти з мережі приходять шматками, і символ може розірватись між ними. Опція { stream: true } це враховує: розкодувальник дочекається решти байтів символу, а не видасть на його місці «крякозябру».

автор: NagarD

Порада

Файл у windows-1251 читається як new TextDecoder('windows-1251').decode(buffer) — жодної бібліотеки не треба.

автор: NagarD

Синтаксис

const text = new TextDecoder("utf-8").decode(bytes);

властивості

Властивість Опис
encoding Кодування декодера.

методи

Метод Опис
decode Байти → рядок.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
TextDecoder 38+ 19+ 10.1+ 25+ 79+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
TextDecoder 38+ yes yes 10.3+

Приклади

+ запропонувати свій приклад у пісочниці

UTF-8, застаріле кодування й потокове читання відповіді.

const bytes = new Uint8Array([208, 159, 209, 128, 208, 184]);
console.log(new TextDecoder().decode(bytes)); // 'При'

(async () => {
    try {
        // потокове читання: символ не розірветься між шматками
        const decoder = new TextDecoder();
        const reader = (await fetch('/img/logo.svg')).body.getReader();
        let size = 0;

        while (true) {
            const { value, done } = await reader.read();

            if (done) {
                break;
            }

            size += value.length;
            decoder.decode(value, { stream: true });
        }

        console.log('Прочитано потоком:', size, 'байтів');
    } catch (error) {
        console.log('Потік недоступний:', error.message);
    }
})();
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід