Python 2.7 считывает файлы в байтовые строки по умолчанию.
Python 3.x считывает файлы в строки Юникода по умолчанию, поэтому байты в файле должны быть декодированы.
Используемая кодировка по умолчанию зависит от операционной системы, но ее можно определить, вызвав locale.getpreferredencoding(False)
. Это часто utf8
в Linux системах, но системы Windows возвращают локализованную кодировку ANSI, например, cp1252
для версий для США / Западной Европы Windows.
В Python 3 укажите кодировка, которую вы ожидаете для файлов, чтобы не полагаться на спецификацию локали c по умолчанию. Например:
with open(path,'r',encoding='utf8') as f:
...
Вы также можете сделать это в Python 2, но использовать io.open()
, который совместим с Python 3 open()
и будет читать строки Unicode вместо строк байтов. , io.open()
доступен в Python 3 для переносимости.