Python 3 - Как обрабатываются и читаются смайлики и юникод в Python? Тест - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть несколько предложений со словами и смайликами, и моя цель - преобразовать смайлики в их описании.

Пример: "? Здравствуйте!" будет преобразовано в "Smiling_face_with_smiling_eyes Hello!"

На самом деле, я не очень разбираюсь в кодировании / декодировании и столкнулся с некоторыми проблемами. Благодаря другому сообщению здесь Преобразование смайликов в Unicode и наоборот Я думаю, что, возможно, нашел решение. Тем не менее, я не понимаю, что это происходит и причины, почему я должен это сделать. Я буду признателен за некоторые объяснения.

Я покажу вам два теста, первый - тот, который провалился. Можете ли вы объяснить, почему?

# -*- coding: UTF-8 -*
unicode = u"\U0001f600"
string = u"\U0001f600 Hello world"
print("SENT: "+string)

ВЫХОД: ОТПРАВЛЕН: ? Hello world

Тест 1 (НЕИСПРАВНОСТЬ):

if string.find(unicode):
   print("after: "+string.replace(unicode,"grinning_face_with_sweat"))
else:
   print("not found : "+unicode)

ВЫХОД: не найдено: ?

Тест 2:

if string.find(unicode.encode('unicode-escape').decode('ASCII')):
   print(string.replace(unicode,"grinning_face_with_sweat"))
else:
   print("not found : "+unicode)

ВЫХОД: grinning_face_with_sweat Hello world

1 Ответ

1 голос
/ 20 апреля 2020

Поскольку текст из unicode находится в начале string, string.find(unicode) возвращает 0. Если не найдено, возвращается -1. Ваш код должен быть:

if string.find(unicode) != -1:
   print("after: "+string.replace(unicode,"grinning_face_with_sweat"))
else:
   print("not found : "+unicode)

Кстати, вы все еще используете Python 2? Я настоятельно рекомендую переключиться на Python 3. И если вы используете Python 3, нет необходимости ставить перед строкой u, поскольку все строки в Python 3 являются Unicode.

...