[英]How to display utf-8 in windows console
我在Windows 7上使用Python 2.6
我從這里借用了一些代碼: Python,Unicode和Windows控制台
我的目標是能夠在Windows控制台中顯示uft-8字符串。
在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,您會發現它最終得到了支持。
啟動Python之前,請使用命令chcp 65001
。
參見http://docs.python.org/dev/whatsnew/3.3.html#codecs
在Python 3.6中,甚至不再需要使用chcp
命令,因為Python完全繞過了字節級控制台接口,而是使用了本機Unicode接口。 請參閱PEP 528:將Windows控制台編碼更改為UTF-8 。
如@ mbom007的注釋中所述,確保控制台配置有支持您要顯示的字符的字體也很重要。
永遠不使用setdefaultencoding
。 如果要將unicode字符串寫入stdio,請對其進行顯式編碼。 用setdefaultencoding
纏身將導致stdlib模塊和第三方模塊以可怕的微妙方式破壞,因為它們允許在str
和unicode
不應該發生的隱式轉換。
是的,問題很可能是您的代碼頁設置不正確。 但是,使用os.popen
不會更改代碼頁。 它會產生一個新的shell,更改其代碼頁,然后立即退出而不影響您的控制台。 我個人對Windows不太熟悉,因此我無法告訴您如何從python程序中更改控制台的代碼頁。
如前所述,通過utf-8從python正確顯示unicode數據的方法是在打印字符串之前對字符串進行顯式編碼: print s.encode('utf-8')
Windows在控制台中不正確支持UTF-8。 我知道在控制台中顯示日語的唯一方法是將(在XP上)“控制面板”的“區域和語言選項”,“高級”選項卡,“非Unicode程序的語言”更改為日語。 重新引導后,打開控制台並運行“ chcp”以查找日語控制台的代碼頁。 然后,打印在正確的代碼頁中顯式編碼的Unicode字符串或字節字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.