Почему Java не генерирует исключение при сбое декодирования байтов в строку?

Если есть какое-то исключение, когда декодирование не удалось, то мы можем попытаться определить кодировку файла по очереди.

Но я не нашел способ, который вызовет какое-то исключение, например «UnicodeDecodeError» в python, есть ли какая-то конкретная причина?

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

PPS: Я задаю этот вопрос, потому что думаю, что это проблема дизайна. У меня нет проблем с кодировкой. Но когда я хочу написать некоторый код для автоматического определения кодировки файла, как это делает Vim (текстовый редактор), я обнаруживаю, что такой дизайн усложняет задачу.


person luochen1990    schedule 05.05.2017    source источник
comment
Откуда вы знаете, что это не удалось? Что такое индикация?   -  person Manish Kumar Sharma    schedule 05.05.2017
comment
процесс декодирования завершается сбоем, когда некоторые байты сопоставляются с неопределенным символом, поскольку большая часть схемы кодирования оставила некоторые незакодированные избыточные коды.   -  person luochen1990    schedule 05.05.2017


Ответы (1)


Любая последовательность байтов будет иметь смысл для вас только как строка, если они имеют смысл как поток символов, который имеет отношение к вашему варианту использования.

Что вы ожидаете от Java, когда интерпретация не подходит для вашего варианта использования? Вы увидите «мусорный» вывод. Но декодирование не было технически неудачным. Сделал это? Таким образом, он не может генерировать никаких исключений.

Указанная вами кодировка, вероятно, несовместима.

person Manish Kumar Sharma    schedule 05.05.2017
comment
Я задаю этот вопрос, потому что я думаю, что это проблема дизайна. У меня нет проблем с кодировкой. Но когда я хочу написать некоторый код для автоматического определения кодировки файла, как это делает Vim (текстовый редактор), я обнаруживаю, что такой дизайн усложняет задачу. - person luochen1990; 05.05.2017
comment
@luochen1990 Используйте библиотеку Apche Tika. Он делает обнаружение кодировки для вас. - person markbernard; 05.05.2017