Это продолжение перехода на Emoji. В этом вопросе OP имел json.dumps()
-encoded с emoji, представленным как суррогатная пара - \ud83d\ude4f
. У S/у него были проблемы с чтением файла и корректным переводом emoji, и правильный ответ заключался в json.loads()
каждой строке из файла, а модуль json
обрабатывал преобразование из суррогатной пары обратно (я предполагаю UTF8 -encoded) emoji.
Итак, вот моя ситуация: скажем, у меня есть только обычная строка юникода 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, там не было никаких различий.