IDLE和unicode字符(2.5.4)

时间:2009-10-28 14:09:43

标签: python unicode

为什么IDLE正确处理一个符号而不处理另一个符号?

>>> e = '€'
>>> print unichr(ord(e))
     # looks like a very thin rectangle on my system.
>>> p = '£'
>>> print unichr(ord(p))
£
>>> ord(e)
128
>>> ord(p)
163

我尝试添加各种#编码行,但这没有帮助。

编辑:浏览器应该是UTF-8,否则这看起来很奇怪

编辑2:在我的系统上,欧元字符在第1行正确显示,但不在打印行中显示。两个地方都正确显示了磅字符。

2 个答案:

答案 0 :(得分:3)

答案取决于IDLE REPL使用的编码。您应该更明确地知道什么是实际的unicode文本,以及什么是字节序列。默想这个例子:

# -*- coding: utf-8 -*-
c = u'€'
print type(c)
for b in c.encode('utf-8'):
    print ord(b)

c = '€'
print type(c)
for b in c:
    print ord(b)

编辑:

对于IDLE,它有点borken,需要修补才能正常工作。

IDLE 1.2.2      
>>> c = u'€'
>>> ord(c)
128
>>> c.encode('utf-8')
'\xc2\x80'
>>> c
u'\x80'
>>> print c
[the box thingy]


>>> c = u'\u20ac'
>>> ord(c)
8364
>>> c.encode('utf-8')
'\xe2\x82\xac'
>>> c
u'\u20ac'
>>> print c
€

在第一个会话中,当解释€时,它已经被错误编码,并且是不可恢复的。

答案 1 :(得分:0)

问题可能是你的字体没有正确的字形。除了正确编码之外,在IDLE ui中显示文本时必须使用正确的字体。尝试使用不同的字体来查看它是否有帮助(例如,Arial Unicode有一个非常大的字形补码)。

欧元符号比英镑符号要新得多,所以你的字体可能没有欧元字形。