2017-01-12 2 views
1

У меня возникли проблемы с форматированием байтовой упорядоченной метки в unicode. Существует некоторая странность в том, как выражается мой персонаж. В основном это не печатает символ emoji в Python, а просто строка. Вот мой пример.Преобразование символов Юникода для Python для Emoji

# these codes are coming from a json file; this a representation of one of the codes. 
e = 'U+1F600' # smile grin emoji 

# not sure how to clean this, so here's a basic attempt using regex. 
b = re.compile(r'U\+', re.DOTALL).sub('\U000', e) 

print unicode(b) # output should be '\U0001F600' 

По какой бы то ни было причине это не печатает символ эможи.

Однако, если вы набираете ту же строку, что и буква, используя флаг u, все работает так, как ожидалось.

print u'\U0001F600' 

Что я здесь делаю неправильно? Я думал, что функция unicode преобразует мою строку в рабочий эквивалент, но, по-видимому, это не так.

Я использую Python 2.7

ответ

8

Я думаю decode является то, что вы ищете,

>>> b = '\U0001F600' 
>>> print b.decode('unicode-escape') 

или

>>> print unicode(b, 'unicode-escape') 


Проблема с

print unicode(b) 

является то, что функция unicode пытается преобразовать строку \U0001F600 в unicode, результатом которой является \\U0001F600. Для предотвращения этого мы предоставляем текущую кодировку как unicode-escape

+0

Получил это! Спасибо @ nu11p01n73R за вашу помощь. В чем причина этой нерегулярности? Каким образом это влияет на результат? – lindsay

+1

@ lindsay Я добавил объяснение. Надеюсь, он поможет – nu11p01n73R

+0

еще раз спасибо! Это очистило все это для меня. :) – lindsay

Смежные вопросы