Как отобразить utf-8 в консоли Windows

Я использую 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=
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()
15
задан Community 23 May 2017 в 11:46
поделиться

2 ответа

Windows неправильно поддерживает кодировку UTF-8 в консоли. Единственный известный мне способ отобразить японский язык в консоли — это изменить (в XP) региональные и языковые параметры панели управления, вкладку «Дополнительно», язык для программ, не поддерживающих Unicode, на японский. После перезагрузки откройте консоль и запустите «chcp», чтобы узнать кодовую страницу японской консоли. Затем либо напечатайте строки Unicode, либо строки байтов, явно закодированные в правильной кодовой странице.

3
ответ дан 1 December 2019 в 01:38
поделиться

Никогда никогда никогда использовать setdefaultencoding. Если вы хотите записать строки Unicode в stdio, закодируйте их явно. Манипулятивное использование setdefaultencoding приведет к тому, что как модули stdlib, так и сторонние модули будут ломаться ужасными тонкими способами, допуская неявное преобразование между str и unicode, когда это должно быть не так. т случится.

Да, проблема, скорее всего, в том, что кодовая страница установлена ​​неправильно. Однако использование os.popen не изменит кодовую страницу; он создаст новую оболочку, изменит свою кодовую страницу, а затем немедленно завершит работу, никак не влияя на вашу консоль. Лично я не очень хорошо знаком с окнами, поэтому не могу рассказать вам, как изменить кодовую страницу вашей консоли из вашей программы на Python.

Правильный способ отображения данных Unicode через utf-8 из python, как упоминалось ранее, заключается в явном кодировании ваших строк перед их печатью: print s.encode('utf-8')

10
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: