IDLE 和 Unicode 字符 (2.5.4)

3 投票
2 回答
2201 浏览
提问于 2025-04-15 15:27

为什么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
€

在第一次会话中,当€这个符号被解释时,它已经被错误地编码了,无法恢复。

撰写回答