JavaScript TextDecoder — байти в рядок
TextDecoder перетворює байти на рядок — і, на відміну від кодувальника, вміє не лише UTF-8.
Загальний опис
Саме тут ховається його головна цінність: він читає застарілі кодування. Файл у windows-1251 (а таких у наших краях досі вистачає) розкодується в нормальну кирилицю одним рядком — раніше для цього тягнули бібліотеки.
Другий випадок — потокове читання. Байти з мережі приходять шматками, і символ може розірватись між ними. Опція { stream: true } це враховує: розкодувальник дочекається решти байтів символу, а не видасть на його місці «крякозябру».
- Порада
-
Файл у windows-1251 читається як
автор: NagarDnew TextDecoder('windows-1251').decode(buffer)— жодної бібліотеки не треба.
Синтаксис
const text = new TextDecoder("utf-8").decode(bytes);
властивості
| Властивість | Опис |
|---|---|
| encoding | Кодування декодера. |
методи
| Метод | Опис |
|---|---|
| decode | Байти → рядок. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| TextDecoder | 38+ | 19+ | 10.1+ | 25+ | 79+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| 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);
}
})();
Коментарі
Коментарів ще немає — будьте першим!