2015-04-13 2 views
1

У меня есть этот список:список Unicode в список Строка Python 2

l = [u'\xf9', u'!'] 

И я хочу, чтобы преобразовать его в этом списке:

l2 = ['ù','!'] 

Как я могу это сделать? и Почему l.encode() не работает?

+1

Er, потому что кодирование является методом по струнам, а не в списках. –

+2

Что вы подразумеваете под преобразованием? '' ù'' - это всего лишь тип представления вашего персонажа! вы имеете в виду, что хотите напечатать это так? – Kasramvd

+0

Извините, я хотел сказать l [0] .encode() –

ответ

1

Вы используете Python 2? Если это так, вы можете быть обмануты тем, как Python отображает строки.

Как вы заметили, '\xc3\xb9' является кодированным представлением UTF-8 кодовой точки U + 00F9 ('ù'). Итак:

# code point 
>>> u'ù' 
u'\xf9' 

# seems wrong ? 
>>> u'ù'.encode('utf-8') 
'\xc3\xb9' 

# No, not at all (at least on my UTF-8 terminal) 
>>> print(u'ù'.encode('utf-8')) 
ù 

Учитывая ваш пример:

>>> l = [u'\xf9', u'!'] 
>>> print(l) 
[u'\xf9', u'!'] 
>>> l[0] 
u'\xf9' 
>>> print(l[0]) 
ù 

>>> l2 = [u.encode('utf-8') for u in l] 
>>> l2 
['\xc3\xb9', '!'] 
>>> print(l2) 
['\xc3\xb9', '!'] 
>>> print(l2[0]) 
ù 

Я согласен все это rather inconsistent and source of frustration. Именно поэтому поддержка строк/юникода была главным переписывают в Python 3. Там:

# Python 3 
>>> l = [u'\xf9', u'!'] 
>>> l 
['ù', '!'] 
Смежные вопросы