Но в файле, который, как я знаю, закодирован ISO8859_1, приведенный выше код выдает ASCII, что неверно и не позволяет мне корректно отобразить содержимое файла обратно на консоль.
Переведено автоматически
Ответ 1
Вы не можете определить кодировку произвольного потока байтов. Такова природа кодировок. Кодировка означает сопоставление между значением в байтах и его представлением. Таким образом, каждая кодировка "может" быть правильной.
Метод GetEncoding() вернет кодировку, которая была настроена (прочитайте JavaDoc) для потока. Он не угадает кодировку за вас.
Некоторые потоки сообщают вам, какая кодировка использовалась для их создания: XML, HTML. Но не поток произвольных байтов.
В любом случае, вы могли бы попытаться угадать кодировку самостоятельно, если потребуется. Каждый язык имеет общую частоту для каждого символа. В английском символ e появляется очень часто, но, к сожалению,, будет появляться очень редко. В потоке ISO-8859-1 обычно нет символов 0x00. Но в потоке UTF-16 их много.
Или: вы могли бы спросить пользователя. Я уже видел приложения, которые представляют вам фрагмент файла в разных кодировках и просят вас выбрать "правильную".
проверьте это: http://site.icu-project.org / (icu4j) у них есть библиотеки для определения кодировки из IOStream, это может быть просто, например, так: