IDLE и символы Юникода (2.5.4) - PullRequest
       21

IDLE и символы Юникода (2.5.4)

3 голосов
/ 28 октября 2009

Почему 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 ]

3 голосов
/ 28 октября 2009

Ответ зависит от того, какую кодировку использует 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)

EDIT:

Что касается 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
€

В первом сеансе к моменту интерпретации € он уже был неправильно закодирован и не подлежит восстановлению.

0 голосов
/ 28 октября 2009

Возможно, проблема в том, что у вашего шрифта нет нужных глифов. В дополнение к правильному кодированию, вы должны иметь правильный шрифт при представлении текста в интерфейсе IDLE. Попробуйте использовать другой шрифт, чтобы увидеть, помогает ли он (например, Arial Unicode имеет очень большое дополнение глифа).

Символ евро намного новее, чем символ в фунтах стерлингов, поэтому ваш шрифт может не иметь символа евро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...