簡體   English   中英

在python中將unicode字符打印到stdout會打印錯誤的字形

[英]Printing unicode characters to stdout in python prints wrong glyphs

我想將一組Unicode字符打印到命令提示符終端。 即使我將編碼強制為“ UTF-8”,終端也會打印一些垃圾。

$python -c "import sys; print sys.stdout.write(u'\u2044'.encode('UTF-8'))"
ΓüäNone

$python -c "import sys; print sys.stdout.encoding"
cp437

我的默認終端編碼是cp437,我正在嘗試覆蓋它。 此處的預期輸出為小數斜杠(⁄)

http://www.fileformat.info/info/unicode/char/2044/index.htm

相同的代碼在我的Mac終端中可以完美地工作,並且使用UTF-8作為默認編碼。 有沒有辦法在Windows上顯示它? 我在Windows命令提示符下使用的字體為consolas。

我希望我的代碼可以使用任何Unicode字符,而不僅僅是這個特定示例,因為輸入是Web查詢結果,而且我無法控制它。

Python無法控制您的終端使用的編碼。 您將不得不在其他地方進行更改。

換句話說,僅僅是因為您強迫python將UTF-8編碼的文本輸出到終端,並不意味着您的終端也將神奇地開始接受該輸出作為UTF-8。

Mac OS X終端已經配置為可與UTF-8一起使用。

在Windows上,可以使用chcp命令切換控制台代碼頁:

chcp 65001

其中65001是UTF-8的Windows代碼頁。 在Windows命令行中查看Unicode字符-如何?

您必須使用UTF-8代碼頁(cp65001)才能顯示UTF-8編碼的文本。

Python 3.3聲稱在Windows上支持代碼頁65001(UTF-8)。

C:\>chcp 65001
Active code page: 65001

C:\>python
Python 3.3.0rc1 (v3.3.0rc1:8bb5c7bc46ba, Aug 25 2012, 13:50:30) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\u2044')
⁄

雖然有問題:

>>> print('\u2044')
⁄

>>> print('\u2044'*8)
⁄⁄⁄⁄⁄⁄⁄⁄
��⁄⁄⁄⁄
⁄⁄
��

>>> print('1\u20442 2\u20443 4\u20445')
1⁄2 2⁄3 4⁄5
⁄5

暫無
暫無

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

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