Вебсправочник
Основы веб-разработки

TextDecoder: строгий разбор байтов текста

TextDecoder преобразует байты в строку с выбранной кодировкой. Когда повреждённый текст нельзя принимать молча, режим fatal позволяет получить ошибку вместо символов замены.

Назначение

TextDecoder преобразует байты в строку с выбранной кодировкой. Когда повреждённый текст нельзя принимать молча, режим fatal позволяет получить ошибку вместо символов замены.

Как это работает

По умолчанию неправильные последовательности обычно заменяются. С fatal:true декодирование недопустимого UTF-8 вызывает исключение. В примере используется небольшой заведомо ошибочный массив, а не реальный пользовательский файл.

Пример

const bytes = new Uint8Array([0xc3, 0x28]);
console.log(new TextDecoder("utf-8").decode(bytes));
try {
  console.log(new TextDecoder("utf-8", {fatal:true}).decode(bytes));
} catch (error) {
  console.log("Некорректная последовательность:", error.name);
}

Что должно получиться

Обычный режим показывает строку с заменой ошибочной части, строгий попадает в catch. Это позволяет приложению сообщить о повреждении данных вместо незаметного изменения текста.

Граница применения и частая ошибка

Правильное декодирование не подтверждает структуру CSV, JSON или другого формата. Для потоковой передачи части одного символа могут приходить разными пакетами; тогда нужен режим потокового декодирования или TextDecoderStream, а не независимый decode каждого куска.

Самостоятельная проверка

Закодируйте корректную строку TextEncoder и декодируйте с fatal:true. Затем обрежьте последний байт многобайтового символа и сравните отказ. Не пытайтесь исправить неизвестную кодировку случайным перебором, если формат источника должен быть указан явно.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.