首頁>Program>source

I'm using Python 2.6 on Windows 7

我从這裏借来了一些代碼: Python,Unicode和windows控製台

My goal is to be able to display uft-8 strings in the windows console.

在python 2.6中,

sys.setdefaultencoding()

不再受支援

但是,我在尝試使用reload(sys)之前就寫了它,而且魔術没有出錯。

此代碼不会出錯,但是会顯示有趣的字元而不是日語文字。 I believe the problem is because I have not successfully changed the codepage of the windows console.

這些是我的尝試,但不起作用:

reload(sys)
sys.setdefaultencoding('utf-8')
print os.popen('chcp 65001').read()
sys.stdout.encoding = 'cp65001'

Perhaps you can use win32console to change the codepage? 我从鏈接的網站上尝試了代碼,但是在win32console上也出錯了。也许该代碼已過時。

這是我的代碼,不会出錯,但会print出有趣的字元:

#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()
最新回復
  • 5月前
    1 #

    我知道您宣告您正在使用Python 2.6,但是如果您能够使用Python 3.3,您会發現它最终得到了支援。

    使用命令 chcp 65001 在啟動Python之前。

    請參阅http://docs.python.org/dev/whatsnew/3.3.html#codecs

    在Python 3.6中,甚至不再需要使用 chcp 命令,因為Python完全绕過了位元組級控製台介面,而是使用了本機Unicode介面.請參阅PEP 528:將windows控製台編碼更改為UTF-8。

    如@ mbom007的註釋中所述,確保控製台配置的字型支援您要顯示的字元也很重要。

  • 5月前
    2 #

    从不ever< / em> ever 使用 setdefaultencoding .如果要將unicode字元串寫入stdio,請對其进行顯式編碼.与 setdefaultencoding胡闹 通過允许 str之間的隱式轉換,將匯致stdlib模組和第三方模組以可怕的微妙方式破壞 和 unicode 什麼時候不應该發生?

    是的,問题很可能是您的代碼頁設置不正確.但是,使用 os.popen 不会更改代碼頁; 它会产生一个新的shell,更改代碼頁,然後立即退出而不影响您的控製台.我个人對windows不太熟悉,所以我無法告诉您如何从python程式中更改控製台的代碼頁。

    如前所述,通過utf-8从python正確顯示unicode資料的方法是在print字元串之前對字元串进行顯式編碼: print s.encode('utf-8')

  • 5月前
    3 #

    更改控製台代碼頁既没有必要,也行不通(特別是將其設置為65001会匯致Python錯誤).有關详细資訊以及如何在控製台中將Unicode字元print到任意代碼頁面,請參见此問题。

  • 5月前
    4 #

    windows在控製台中不正確支援UTF-8.我知道在控製台中顯示日語的唯一方法是將(在XP上)"控製面板"的"區域和語言選項","高級"選項卡,"非Unicode程式的語言"更改為日語.重新引匯後,打開控製台並執行" chcp"以查詢日語控製台的代碼頁.然後,print在正確的代碼頁中顯式編碼的Unicode字元串或位元組字元串。

  • 在MySQL中返迴每个" group by"的" last"行
  • c#:wIN32_Processor :: Is ProcessorId對於所有計算機都是唯一的