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.