Я использую Python 3 (недавно переключился с Python 2). Мой код обычно работает на Linux, но иногда (не часто) на Windows. Согласно документации Python 3 для open()
, кодировка по умолчанию для текстового файла составляет от locale.getpreferredencoding()
, если аргумент encoding
не указан. Я хочу, чтобы это значение по умолчанию было utf-8
для моего проекта, независимо от того, на какой ОС он работает (в настоящее время это всегда UTF-8 для Linux, но не для Windows). В проекте много звонков open()
, и я не хочу добавлять encoding='utf-8'
всем им. Таким образом, я хочу изменить предпочтительную кодировку языка в Windows, как это видит Python 3.Изменение «предпочтительной кодировки языка» в Python 3 в Windows
Я нашел предыдущий вопрос «Changing the "locale preferred encoding"», который принял принятый ответ, поэтому я подумал, что я должен идти. Но, к сожалению, ни одна из предложенных команд в этом ответе и первый комментарий для меня не работают в Windows. В частности, этот принятый ответ и его первый комментарий предполагают запуск chcp 65001
и set PYTHONIOENCODING=UTF-8
, и я пробовал оба. Пожалуйста, смотрите расшифровку ниже моего окна CMD:
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> chcp 65001
Active code page: 65001
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> set PYTHONIOENCODING=UTF-8
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
Обратите внимание, что даже после того, как предложили команды, кодирование моего открываемого файла по-прежнему cp1252
вместо предполагаемого utf-8
.
Возможно, это только мой стиль, но я бы предпочел написать функцию open() оболочки, в которой вы указываете кодировку. –
Не используйте 'chcp 65001'. Консоль Windows неправильно поддерживает UTF-8, и в любом случае она не делает то, что вы хотите. 'locale.getpreferredencoding' не имеет никакого отношения к кодовой странице консоли; он основан на кодировке ANSI в локали Windows. Например, если вы вызываете Win32 'CreateFileA' (ANSI) вместо' CreateFileW' (UTF-16), строка пути файла декодируется как строка ANSI (например, Windows-1252). Windows не позволяет использовать UTF-8 в качестве набора символов ANSI, а среда выполнения C также не позволяет использовать UTF-8 для локали. – eryksun
@eryksun Спасибо за информацию, но для меня слишком много жаргонов для Windows. Я редко использую Windows. Все, что я хочу, это способ сказать либо Windows 8, либо Python 3: «Дорогой Windows 8/Python 3, Пожалуйста, имейте в виду, что все текстовые файлы на этом компьютере должны быть закодированы в UTF-8 без исключения. в будущем при открытии текстовых файлов. – walrus