IDLE 和 Unicode 字符 (2.5.4)
为什么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
我试着添加了各种# coding行,但这并没有帮助。
补充:浏览器应该设置为UTF-8,否则显示出来的会很奇怪。
补充2:在我的系统上,欧元符号在第一行显示正确,但在打印的那一行却不对。英镑符号在两个地方都显示正确。
2 个回答
0
这个问题可能是因为你的字体没有正确的字符。除了确保编码正确之外,在IDLE界面显示文本时,你还需要使用合适的字体。试试换个字体,看看是否能解决问题(比如Arial Unicode字体就包含了很多字符)。
欧元符号比英镑符号出现得要晚,所以你的字体可能没有欧元的字符。
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,它有点坏掉了,需要修补才能正常工作。
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
€
在第一次会话中,当€这个符号被解释时,它已经被错误地编码了,无法恢复。