У меня есть этот список:список Unicode в список Строка Python 2
l = [u'\xf9', u'!']
И я хочу, чтобы преобразовать его в этом списке:
l2 = ['ù','!']
Как я могу это сделать? и Почему l.encode() не работает?
У меня есть этот список:список Unicode в список Строка Python 2
l = [u'\xf9', u'!']
И я хочу, чтобы преобразовать его в этом списке:
l2 = ['ù','!']
Как я могу это сделать? и Почему l.encode() не работает?
Вы используете 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
['ù', '!']
Er, потому что кодирование является методом по струнам, а не в списках. –
Что вы подразумеваете под преобразованием? '' ù'' - это всего лишь тип представления вашего персонажа! вы имеете в виду, что хотите напечатать это так? – Kasramvd
Извините, я хотел сказать l [0] .encode() –