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.