Я уже несколько часов вытаскиваю волосы из этой проблемы.По умолчанию кодировка Python 3 в Open() под Windows. sys.getdefaultencoding() не соблюдается
У меня есть файл сообщения, который я хочу сгенерировать, используя команду makemessages от django, которая отлично работает в среде Linux, которая на самом деле корректно обрабатывает настройки локали. Однако, когда я пытаюсь сделать то же самое в Windows, каждый раз, когда python пытается открыть файл, он предполагает, что он закодирован в cp932
(SHIFT-JIS), что вызывает всевозможные хаосы.
Вручную добавляет encoding='utf-8'
к каждому звонку open
, но это вряд ли хороший способ устранить проблему. Есть ли способ заставить open
использовать конкретную кодировку по умолчанию? 'UTF-8'
sys.getdefaultencoding()
возвращается, по какой-то загадочной причине эта установка не соблюдается- PYTHONIOENCODING и PYTHONENCODING оба устанавливаются в 'UTF-8'
- Мой код страницы устанавливается на
cp65001
Это мой питон версия строка:
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32
EDIT: Я заметил, что locale.getpreferredencoding()
возвращает cp932
, поэтому я думаю, что поиск локали Windows с utf-8
по умолчанию будет делать трюк. Существует ли такая вещь?
Это может быть ошибка в 3.3 на Windows, если вы действительно не можете найти решение. С другой стороны, явное указание кодировки при вызове 'open()' не является плохой идеей. –
Ну, я знаю, что явное указание на кодировку никогда не бывает плохой идеей, проблема в том, что замена всех вызовов на 'open' в соответствующих частях служебных программ Django нецелесообразна. Я обнаружил, что 'locale.getpreferredencoding()' возвращает 'cp932', так что это может быть проблемой. Есть ли локали Windows, которые устанавливают это в 'utf-8'? – mval
Возможно, я не знаком с этим. Но тот факт, что он возвращает 'cp932', действительно может указывать на то, что здесь мешает локальная установка на вашем компьютере (или Windows вообще). –