Python - Lecture Emoji Caractères Unicode
J'ai un Python 2.7 programme qui lit l'iOS messages texte à partir d'une base de données SQLite. Les messages texte sont des chaînes unicode. Dans le texte suivant message:
u'that\u2019s \U0001f63b'
L'apostrophe est représenté par \u2019
, mais l'emoji est représenté par \U0001f63b
. J'ai regardé le code de point pour l'emoji en question, et c'est \uf63b
. Je ne suis pas sûr de l'endroit où le 0001
. Je sais comique, c'est que peu de choses sur les encodages de caractères.
Lorsque j'imprime le texte, caractère par caractère, à l'aide de:
s = u'that\u2019s \U0001f63b'
for c in s:
print c.encode('unicode_escape')
Le programme produit le résultat suivant:
t
h
a
t
\u2019
s
\ud83d
\ude3b
Comment puis-je lire correctement ces derniers caractères en Python? Suis-je à l'aide de coder correctement ici? Devrais-je tenter de la corbeille ceux 0001
s avant de le lire, ou est-il plus facile, moins stupide?
0xf63b
est dans la "Usage Privé" de la section de l'Unicode. Êtes-vous sûr que c'est correct? Votre codepoint est probablement 0x1f63b
, car c'est un "chat souriant avec les yeux du coeur" icônes emoji.Comment avez-vous déterminer qui
\uf63b
serait un Emoji personnage? Selon ma référence, c'est pas défini: fileformat.info/info/unicode/char/f63b/index.htmOriginalL'auteur Andrew LaPrise | 2015-07-07
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous êtes à l'aide de coder correctement, ni avez-vous besoin d'. Ce que vous avez est une valeur de chaîne unicode avec un numéro à 4 chiffres et un chiffre 8 de la séquence d'échappement. Essayez ceci dans le REPL sur, disons, OS X
En python3, bien -
vous voyez un artefact de la façon Python stocke ses chaînes Unicode en interne. Si vous avez fait la même chose en Python 3, vous devriez voir quelque chose de différent totalement.
L'autre réponse a une bonne info, dont le résumé est "si possible déplacer vers Python3'. Sinon, vous êtes dans un monde de douleur ou de paires de substitution/les mots que vous ne voulez pas savoir, car ils sont la chanson de l'appel de Cthulhu
'\ud83d' et '\ude3b' est une paire de substitution, utilisé par UTF-16 pour représenter un point de code ci-dessus
U+FFFF
. C'est un bug en Python 2, beaucoup de langues ont le problème avec ces personnages.u'\U0001f63b' sur Python 2 et 3 sur ma machine ("Python crée" sont pris en charge depuis 2001)
OriginalL'auteur pvg
Votre dernière partie de la confusion est probablement dû au fait que vous êtes l'exécution de ce qui est appelé une "étroite Python construire". Python ne peuvent pas tenir un caractère unique avec suffisamment d'informations pour contenir une et une seule des emoji. La meilleure solution serait de passer à Python 3. Sinon, essayez de traiter le UTF-16 paire de substitution.
regex.findall(r'\X', unicode_text)
peut être utilisée pour obtenir "perçue par l'utilisateur caractères" qui peut s'étendre sur plus d'une Unicode codepoint (il est sans rapport avec les paires de substitution, mais il devrait résoudre le problème comme un effet secondaire).OriginalL'auteur Alyssa Haroldsen