Python 空闲字符和unicode字符(2.5.4)

Python 空闲字符和unicode字符(2.5.4),python,unicode,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 我试着添加

为什么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行正确显示欧元字符,但在打印行中不正确。磅字符在两个位置都正确显示。

答案取决于空闲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 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
€

在第一个会话中,当欧元被解释时,它已经被错误编码,并且无法恢复。

问题可能是您的字体没有正确的字形。除了正确编码外,在空闲ui中显示文本时,还必须使用正确的字体。尝试使用其他字体看看是否有帮助(例如,Arial Unicode有一个非常大的字形补码)


欧元符号比英镑符号新得多,因此您的字体可能没有欧元字形。

请参阅我对问题的编辑。我的系统在第一行正确显示了euro char,这意味着我有正确的标志符号。问题是unichr(ord(e))不显示欧元,可能与ord(e)为128有关?因为您的编码错误,
ord(e)
没有返回unicode码点
;它将重新调整伪字节IDLE编码提供给它无法正确表示的字符的任何内容。显式utf-8没有帮助(或是不够),但显式添加u确实有帮助。我想知道为什么磅字符不需要u?print c(c=u'€')打印一个欧元字符。打印unichr(作战需求文件(c))不适用。不是吗?这取决于控制台的编码(输入和输出)。我可以理解为什么控制台的差异会解释为什么pound和euro会得到不同的结果,但是为什么print c和print unichr(ord(c))会得到不同的结果,特别是当c==unichr(ord(c))?在我的python2.7 idle中,如果源代码包含任何Unicode文本,则无法保存,而是始终提示错误“必须保存源,是否确定要保存?”。有什么想法吗?