Это продолжение преобразования в эмодзи. В этом вопросе OP имел json.dumps()
-закодированный файл с эмодзи, представленным в виде суррогатной пары - \ud83d\ude4f
. У него / нее возникли проблемы с чтением файла и правильным переводом смайлов, и правильный ответ заключался в том, чтобы json.loads()
каждую строку из файл, а модуль json
будет обрабатывать преобразование суррогатной пары обратно в (я предполагаю, что кодировка UTF8) смайлики.
Итак, вот моя ситуация: скажем, у меня есть обычная строка Unicode Python 3 с суррогатной парой в ней:
emoji = "This is \ud83d\ude4f, an emoji."
Как обработать эту строку, чтобы получить представление эмодзи из этого? Я хочу получить что-то вроде этого:
"This is ????, an emoji."
# or
"This is \U0001f64f, an emoji."
Я пробовал:
print(emoji)
print(emoji.encode("utf-8")) # also tried "ascii", "utf-16", and "utf-16-le"
json.loads(emoji) # and `.encode()` with various codecs
Обычно я получаю ошибку, похожую на UnicodeEncodeError: XXX codec can't encode character '\ud83d' in position 8: surrogates no allowed
.
Я запускаю Python 3.5.1 в Linux с $LANG
, установленным на en_US.UTF-8
. Я запускал эти образцы как в интерпретаторе Python в командной строке, так и в IPython, запущенном в Sublime Text - похоже, никаких различий нет.
tweepy
(и вообще Твиттер, я полагаю), похоже, этим занимается. Упоминание об этом здесь в надежде, что больше поисков Google по этой проблеме найдут этот ответ. - person tripleee   schedule 10.11.2019