Python 3 кодировка по умолчанию cp1252

недавно я столкнулся с некоторыми проблемами декодирования дескриптора (с отображением ошибок 0x81, 0x8D) из модуля Biopython с установкой anaconda 4.1.1 python 3.5.2 в системе sony vaio windows 10

после некоторых исследований кажется, что, возможно, проблема может заключаться в том, что кодек декодирования по умолчанию-cp1252. Я запустил код ниже и обнаружил, что действительно кодек по умолчанию установлен в cp1252.

однако несколько сообщений предполагают, что python 3 должен был установить значение по умолчанию кодек в utf8. Это верно? Если да, то почему мой cp1252 и как я могу это решить? import locale os_encoding = locale.getpreferredencoding()

1 ответов


по данным Что нового в Python 3.0,

существует зависящая от платформы кодировка по умолчанию [...] во многих случаях, но не во всех, системным значением по умолчанию является UTF-8; вы никогда не должны рассчитывать на это значение по умолчанию.

и

PEP 3120: кодировка источника по умолчанию теперь UTF-8.

другими словами, Python по умолчанию открывает исходные файлы как UTF-8, но любое взаимодействие с файловой системой будет зависеть от окружающая среда. Настоятельно рекомендуется использовать open(filename, encoding='utf-8') читать файл.

еще одно изменение-это b'bytes'.decode() и 'str'.encode() без аргумента используйте utf-8 вместо ascii.

Python 3.6 изменения еще несколько значений по умолчанию:

PEP 529: измените кодировку файловой системы Windows на UTF-8

PEP 528: измените кодировку консоли Windows на UTF-8

но кодировка по умолчанию для open() по-прежнему любой Python удается вывести из окружения.

похоже, что 3.7 добавит (opt-in!) режим, в котором кодировка языка окружающей среды игнорируется, и все время UTF-8 (за исключением конкретных случаев, когда Windows использует UTF-16, я полагаю). См.PEP 0540 и тегом вопрос 29240.