Нет, такой функции нет, потому что файлы не записывают, какой кодек использовался для записи содержащегося текста.
Если есть больше контекста (например, более конкретный формат, такой как HTML или XML), то вы можете определить кодек, потому что стандарт определяет значение по умолчанию или позволяет аннотирования данных с кодеком, но в противном случае вы снижаются к угадыванию на основе содержимого (что и делают такие инструменты, как chardet
).
Для файла, который может изменить любой пользователь, у вас нет никакой надежды, кроме как четко документировать, какой кодек следует использовать.
Я также думаю, что есть больше контекста, но нет. Большинство строк (около 5k) находятся в utf-8, но на некоторых строках я получаю UnicodeDecodeError ... :( – alabamajack
@alabamajack: лучшее, что вы можете сделать, это использовать режим ошибок, который либо игнорирует такие ошибки или заменяет недоказуемые байты с заменяющими символами ('?' или ' '). –
Интересно, что существуют системы, которые * делают * записывать кодировку с каждым файлом (например, средний уровень IBM). Но, конечно, если они вообще взаимодействуют с «внешний мир», они могут получать файлы без информации о кодировании или отправлять файлы в другие системы, которые не соблюдают предоставленную информацию кодирования. –