JavaScript TextDecoder.decode() — байти в рядок
Метод decode() перетворює байти на рядок.
Загальний опис
Найважливіша опція — { stream: true }. Байти з мережі приходять шматками, і багатобайтовий символ (українська літера, емодзі) цілком може розірватись між двома шматками.
Без цієї опції розкодувальник побачить обірваний символ і поставить на його місце «крякозябру» — назавжди. З нею він запам'ятає незавершені байти й дочекається решти в наступному шматку.
Тому правило просте: читаєш потоком — завжди { stream: true } на всіх шматках, крім останнього.
- Порада
-
Дивні символи посеред тексту при потоковому читанні — це майже завжди забутий
автор: NagarD{ stream: true }.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| decode | 38+ | 19+ | 10.1+ | 25+ | 79+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| decode | 38+ | yes | yes | 10.3+ |
Приклади
+ запропонувати свій приклад у пісочниці
Потокове читання без розірваних символів.
(async () => {
const decoder = new TextDecoder();
try {
const reader = (await fetch('/img/logo.svg')).body.getReader();
let text = '';
while (true) {
const { value, done } = await reader.read();
if (done) {
text += decoder.decode(); // добираємо хвіст
break;
}
// без stream: true символ міг би розірватись між шматками
text += decoder.decode(value, { stream: true });
}
console.log('Прочитано символів:', text.length);
} catch (error) {
console.log('Потік недоступний:', error.message);
}
})();
Коментарі
Коментарів ще немає — будьте першим!