Как работать с суррогатными парами в Python?
Это продолжение кПреобразование в эмодзи, В этом вопросе у ОП была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 - никаких различий, похоже, нет.