Unicode utf-8/utf-16 en Python
En python:
u'\u3053\n'
Est-il utf-16?
Je ne suis pas vraiment au courant de tous les caractères unicode/encodage des trucs, mais ce genre de chose est à venir dans mon dataset,
comme si j'ai a=u'\u3053\n'
.
print
donne une exception et
décodage donne une exception.
a.encode("utf-16") > '\xff\xfeS0\n\x00'
a.encode("utf-8") > '\xe3\x81\x93\n'
print a.encode("utf-8") > πüô
print a.encode("utf-16") >
S0
Ce qui se passe ici?
OriginalL'auteur 8steve8 | 2009-08-04
Vous devez vous connecter pour publier un commentaire.
C'est un caractère unicode qui ne semble pas être affichables dans vos terminaux de codage.
print
essaie de coder l'unicode objet dans l'encodage de votre terminal et si cela ne peut pas être fait, vous obtenez une exception.Sur un terminal qui peut afficher l'utf-8, vous bénéficiez de:
Votre terminal ne semble pas être en mesure d'afficher utf-8, sinon au moins le
print a.encode("utf-8")
ligne doit produire le caractère correct.OriginalL'auteur sth
Vous demander:
La réponse est non: c'est de l'unicode, pas un codage spécifique. utf-16 est un encodage.
Pour imprimer une chaîne Unicode efficacement à votre terminal, vous avez besoin de savoir ce que le codage que le terminal est prêt à accepter et à mesure de l'affichage. Par exemple, le Terminal.application sur mon ordinateur portable est configuré en UTF-8 et riche de police, donc:
(source: aleax.il)
...les Hiragana lettre s'affiche correctement. Sur un poste de travail Linux, j'ai un programme de terminal qui maintient la réinitialisation du Latin-1, de sorte qu'il serait déforme les choses un peu comme la vôtre -- je peux le mettre en utf-8, mais il n'a pas grand nombre de glyphes de la police, de sorte qu'il serait d'afficher un peu inutile espace réservé glyphes à la place.
OriginalL'auteur Alex Martelli
Caractère U+3053 "HIRAGANA LETTRE KO".
La
\xff\xfe
peu au début de l'UTF-16 format binaire est codé marque d'ordre d'octet (U+FEFF), puis "S0" est\x5e\x30
, puis il y a la\n
de la chaîne d'origine. (Chacun des personnages a ses octets "inversé" comme c'est à l'aide de little endian l'encodage UTF-16.)L'UTF-8 représente le même caractère Hiragana en trois octets, avec le motif de bits que documenté ici.
Maintenant, quant à savoir si vous devriez vraiment avoir dans votre ensemble de données... où est-ce que les données provenant de l'? Est-il raisonnable d'avoir des caractères Hiragana?
OriginalL'auteur Jon Skeet
Voici l'Unicode HowTo Doc de Python 2.6.2:
http://docs.python.org/howto/unicode.html
Également voir les liens dans la section de Référence de ce document pour d'autres explications, y compris par Joel Spolsky.
OriginalL'auteur Anon