Ответ зависит от того, какую кодировку использует 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
€
В первом сеансе к моменту интерпретации € он уже был неправильно закодирован и не подлежит восстановлению.