簡體   English   中英

如何在Windows控制台中顯示UTF-8

[英]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模塊和第三方模塊以可怕的微妙方式破壞,因為它們允許在strunicode不應該發生的隱式轉換。

是的,問題很可能是您的代碼頁設置不正確。 但是,使用os.popen不會更改代碼頁。 它會產生一個新的shell,更改代碼頁,然后立即退出而不影響您的控制台。 我個人對Windows不太熟悉,因此我無法告訴您如何從python程序中更改控制台的代碼頁。

如前所述,通過utf-8從python正確顯示unicode數據的方法是在打印字符串之前對字符串進行顯式編碼: print s.encode('utf-8')

更改控制台代碼頁既沒有必要,也行不通(特別是,將其設置為65001會導致Python錯誤 )。 請參閱此問題,以獲取詳細信息以及有關如何將Unicode字符打印到控制台而不考慮代碼頁的信息。

Windows在控制台中不正確支持UTF-8。 我知道在控制台中顯示日語的唯一方法是將(在XP上)“控制面板”的“區域和語言選項”,“高級”選項卡,“非Unicode程序的語言”更改為日語。 重新引導后,打開控制台並運行“ chcp”以查找日語控制台的代碼頁。 然后,打印在正確的代碼頁中顯式編碼的Unicode字符串或字節字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM