Ответ 1
Я знаю, что вы заявляете, что используете Python 2.6, но если вы можете использовать Python 3.3, вы обнаружите, что это наконец поддерживается.
Используйте команду chcp 65001
перед запуском Python.
Я использую Python 2.6 на Windows 7
Я заимствовал у меня код: Python, Unicode и консоль Windows
Моя цель - отображать строки uft-8 в консоли Windows.
Как явствует из python 2.6,
sys.setdefaultencoding()
больше не поддерживается
Тем не менее, я написал reload (sys), прежде чем попытался его использовать, и это волшебным образом не ошибкой.
Этот код НЕ будет ошибкой, но он отображает смешные символы вместо японского текста. Я считаю, проблема в том, что я не успешно изменил кодовую страницу консоли Windows.
Это мои попытки, но они не работают:
reload(sys)
sys.setdefaultencoding('utf-8')
print os.popen('chcp 65001').read()
sys.stdout.encoding = 'cp65001'
Возможно, вы можете использовать win32console для изменения кодовой страницы? Я пробовал код с сайта, который я связал, но он также ошибочен с win32console.. возможно, этот код устарел.
Здесь мой код, который не вызывает ошибку, но печатает смешные символы:
#coding=<utf8>
import os
import sys
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)
#print os.popen('chcp 65001').read()
print(sys.stdout.encoding)
sys.stdout.encoding = 'cp65001'
print(sys.stdout.encoding)
x = raw_input('press enter to continue')
a = 'こんにちは世界'#.decode('utf8')
print a
x = raw_input()
Я знаю, что вы заявляете, что используете Python 2.6, но если вы можете использовать Python 3.3, вы обнаружите, что это наконец поддерживается.
Используйте команду chcp 65001
перед запуском Python.
Никогда никогда не используйте setdefaultencoding
. Если вы хотите написать строки unicode в stdio, закодируйте их явно. Обезвреживание с помощью setdefaultencoding
приведет к тому, что модули stdlib и сторонние модули сломаются ужасно тонкими способами, разрешив неявное преобразование между str
и unicode
, когда этого не произойдет.
Да, проблема скорее всего в том, что ваша кодовая страница настроена неправильно. Однако использование os.popen
не изменит кодовую страницу; он создаст новую оболочку, изменит ее кодовую страницу и сразу же выйдет, не затрагивая вашу консоль вообще. Я лично не очень хорошо знаком с окнами, поэтому я не мог сказать вам, как изменить свою кодовую страницу консоли из вашей программы python.
Способ корректного отображения данных Unicode через utf-8 из python, как упоминалось ранее, заключается в явном кодировании ваших строк перед их печатью: print s.encode('utf-8')
Изменение кодовой страницы консоли не нужно и не будет работать (в частности, установив ее на 65001 в ошибка Python), Подробнее см. этот вопрос и о том, как печатать символы Unicode на консоли независимо от кодовой страницы.
Windows не поддерживает UTF-8 в консоли должным образом. Единственный способ, с помощью которого я могу показать японский язык в консоли, - это изменить (на XP) региональные и языковые параметры панели управления, вкладку "Дополнительно", "Язык для программ, не поддерживающих Unicode", на японский язык. После перезагрузки откройте консоль и запустите "chcp", чтобы узнать японскую кодовую страницу консоли. Затем либо печатайте строки Unicode, либо строки байтов, явно закодированные на правильной кодовой странице.