Como trabalhar com pares substitutos em Python?

Este é um acompanhamento paraConvertendo para Emoji. Nessa questão, o OP teve umjson.dumps()codificado com um emoji representado como um par substituto -\ud83d\ude4f. Ele estava com problemas para ler o arquivo e traduzir o emoji corretamente, e o corretoresponda era parajson.loads() cada linha do arquivo e ojson O módulo lidaria com a conversão do par substituto para emoji (estou assumindo codificado em UTF8).

Então, aqui está a minha situação: digamos que eu tenho apenas uma string unicode regular do Python 3 com um par substituto:

emoji = "This is \ud83d\ude4f, an emoji."

Como eu processo essa string para obter uma representação doemoji fora disso? Eu estou olhando para obter algo parecido com isto:

"This is , an emoji."
# or
"This is \U0001f64f, an emoji."

Eu tentei:

print(emoji)
print(emoji.encode("utf-8")) # also tried "ascii", "utf-16", and "utf-16-le"
json.loads(emoji) # and `.encode()` with various codecs

Geralmente, recebo um erro semelhante aUnicodeEncodeError: XXX codec can't encode character '\ud83d' in position 8: surrogates no allowed.

Estou executando o Python 3.5.1 no Linux, com$LANG definido comoen_US.UTF-8. Eu executei esses exemplos no interpretador Python na linha de comando e no IPython executando no Sublime Text - não parece haver diferenças.

questionAnswers(2)

yourAnswerToTheQuestion