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. Затем обрежьте последний байт многобайтового символа и сравните отказ. Не пытайтесь исправить неизвестную кодировку случайным перебором, если формат источника должен быть указан явно.