Python unicode dans Mac os X terminal
Quelqu'un peut m'expliquer cette chose étrange:
Quand en python shell de type I la suite de chaîne Cyrillique:
>>> print 'абвгд'
абвгд
mais quand je tape:
>>> print u'абвгд'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128)
Depuis la première tring est sorti correctement, je pense que mon système d'exploitation de terminal X peut représenter l'unicode, mais il s'avère qu'il ne peut pas dans le second cas. Pourquoi ?
OriginalL'auteur disc0dancer | 2009-05-27
Vous devez vous connecter pour publier un commentaire.
Lorsque vous tapez quelques caractères, votre terminal décide de la façon dont ces personnages sont représentés à l'application. Votre terminal peut donner les caractères de l'application codé en utf-8, ISO-8859-5, ou même quelque chose que votre terminal comprend. Python obtient ces caractères comme une séquence d'octets. Ensuite python imprime ces octets comme ils sont, et votre terminal interprète d'une certaine façon à afficher les caractères. Depuis votre terminal généralement interprète les octets de la même façon que encodés avant, tout s'affiche comme vous l'avez tapé dans.
Ici vous tapez quelques caractères qui arrivent à l'interpréteur de python comme une séquence d'octets, peut-être codée, d'une certaine façon par le terminal. Avec le
u
préfixe de python essaie de convertir ces données en unicode. Pour ce faire correctement python a connu ce que l'encodage de votre terminal utilise. Dans votre cas, il ressemble Python devine vos terminaux encodage serait ASCII, mais les données reçues ne correspondent pas à ça, si vous obtenez une erreur de codage.La droite de l'avant de façon à créer des chaînes unicode dans une session interactive serait donc quelque chose comme ceci:
Dans les fichiers, vous pouvez également spécifier l'encodage du fichier avec un mode spécial de ligne:
Pour d'autres moyens de définir l'entrée par défaut l'encodage, vous pouvez regarder
sys.setdefaultencoding(...)
ousys.stdin.encoding
.+1 très complète répondre
OriginalL'auteur sth
Que de la version 2.6 de Python, vous pouvez utiliser la variable d'environnement
PYTHONIOENCODING
dire à Python que votre terminal est en UTF-8 capable. Le moyen le plus facile pour faire de ce permanent est en ajoutant la ligne suivante à votre~/.bash_profile
:Bon exemple, d'autant plus que OSX python construire venir avec de maigres
sys.maxunicode == 0xffff
J'ai eu des problème avec sympy pretty print et vos truc a résolu le problème. Je vous remercie.
python -c "print(u"\U0001F46F")'
Il ne fonctionne pas pour moi!
OriginalL'auteur Ingmar Hupp
En plus d'assurer votre OS X terminal est mis en UTF-8, vous pouvez configurer votre python sys par défaut l'encodage UTF-8 ou mieux. Créez un fichier dans
/Library/Python/2.5/site-packages
appelésitecustomize.py
. Dans ce fichier:La
setdefaultencoding
méthode est disponible uniquement par le module du site, et est supprimé de la sys espace de noms une fois de démarrage est terminé. En tant que tel, vous aurez besoin pour commencer un nouvel interpréteur python pour que la modification prenne effet. Vous pouvez vérifier la valeur par défaut de codage à tout moment après le démarrage avecsys.getdefaultencoding()
.Si les personnages ne sont pas déjà unicode et vous avez besoin de les convertir, utiliser le
decode
méthode sur une chaîne, afin de décoder le texte à partir d'un autre jeu de caractères en unicode... préférable de spécifier le jeu de caractères:Merci pour l'info discodancer... vous avez raison... mon mauvais.
Ne pas changer le système de codage par défaut; fixer vos valeurs Unicode à la place. Modification de l'encodage par défaut peut briser les bibliothèques qui dépendent de la, vous le savez, le comportement par défaut. Il y a une raison pour laquelle vous avez la force d'un module de recharger avant de pouvoir le faire.
il fonctionne pour moi, Et il suffit de faire une seule, résoudre à tout jamais!
OriginalL'auteur Jarret Hardie
Aussi, assurez-vous que le terminal de codage d'Unicode/UTF-8 (et non ascii, ce qui semble être votre configuration):
http://www.rift.dk/news.php?item.7.6
OriginalL'auteur cdonner
Un objet unicode doit être codées avant d'être affiché sur certaines consoles. Essayez
au lieu de coder l'unicode pour un objet de type string (probablement à l'aide de l'utf-8 comme encodage par défaut, mais cela dépend de votre python config)
OriginalL'auteur workmad3
'абвгд" n'est pas une chaîne unicode
u'абвгд' est une chaîne unicode
Vous ne pouvez pas imprimer des chaînes unicode sans codage. Lorsque vous traitez avec des chaînes dans votre application, vous voulez vous assurer que toute entrée est décodé et une sortie codée. De cette façon, votre demande ne traite qu'avec des chaînes unicode en interne et de sortie des chaînes de caractères en UTF8.
Pour référence:
OriginalL'auteur hekevintran