Двоичные файлы (байты), которые на самом деле являются текстом в некоторой кодировке для этих байтов, к сожалению, где-то не хранят кодировку (кодировку).
Иногда где-то присутствует кодировка: текст Unicode может иметь необязательный символ спецификации в начале файла. HTML и XML могут указывать кодировку.
Если вы загрузили файл из Интернета в строках заголовка, можно указать кодировку. Скажем, это был файл HTML, и Content-Type: text/html; charset=Windows-1251
. Затем вы можете прочитать файл в Windows-1251 и всегда сохранять его как UTF-8, изменив / добавив <meta charset="UTF-8">
.
Но в целом нет решения для определения кодировки какого-либо файла. Вы могли бы сделать:
- читать байты
- если преобразовано в UTF-8 без ошибок в многобайтовых последовательностях, это UTF-8
- в противном случае это однобайтовая кодировка, по умолчанию Windows-1252 (а не ISO-8859-1)
- возможно, используйте таблицы частот слов некоторых языков вместе с кодировками и попробуйте их
- записать байты в определенной кодировке в файл как UTF-8
Может быть, библиотека делает такое; объединение распознавания языка и распознавания кодировки.