2017-02-06 2 views
4

Недавно я столкнулся с некоторыми проблемами декодирования ручки (с ошибками отображением 0x81, 0x8D) из модуля Biopython с анаконда 4.1.1 питона 3.5.2 Установки на Sony VAIO окна 10 системыPython 3 Кодировка по умолчанию cp1252

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

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

ответ

5

Согласно What’s New In 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 changes некоторые больше по умолчанию:

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

PEP 528: Изменение Windows, консольный кодировку UTF-8

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

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

+0

Уточнение, которое я использую .read() для анализа дескриптора из модуля Entrez.efetch. Можно ли тогда указать кодировку как с open()? –

Смежные вопросы