web-dev-qa-db-fra.com

Comment imprimer un caractère Unicode en Python?

Je veux faire un dictionnaire où les mots anglais pointent vers les traductions russe et française. 

Comment imprimer des caractères unicode en Python? Aussi, comment stockez-vous les caractères Unicode dans une variable?

86
NoobDev4iPhone

Pour inclure des caractères Unicode dans votre code source Python, vous pouvez utiliser Caractères d'échappement Unicode sous la forme \u0123 dans votre chaîne et préfixer le littéral de chaîne avec 'u'.

Voici un exemple exécuté dans la console interactive Python:

>>> print u'\u0420\u043e\u0441\u0441\u0438\u044f'
Россия

Les chaînes déclarées comme ceci sont des variables de type Unicode, comme décrit dans la documentation Unicode Python .

Si l'exécution de la commande ci-dessus n'affiche pas le texte correctement pour vous, votre terminal n'est peut-être pas capable d'afficher des caractères Unicode.

Pour plus d'informations sur la lecture de données Unicode à partir d'un fichier, voir la réponse suivante:

Lecture de caractères dans un fichier en Python

84
Matt Ryall

Imprimer un caractère unicode en Python:

Imprimer un caractère unicode directement à partir d'un interpréteur python:

el@apollo:~$ python
Python 2.7.3
>>> print u'\u2713'
✓

Le caractère Unicode u'\u2713' est une coche. L'interprète imprime la coche à l'écran.

Imprimer un caractère unicode à partir d'un script python:

Mettez ceci dans test.py:

#!/usr/bin/python
print("here is your checkmark: " + u'\u2713');

Exécutez-le comme ça:

el@apollo:~$ python test.py
here is your checkmark: ✓

Si cette option n'est pas cochée, le problème peut provenir d'ailleurs, par exemple des paramètres du terminal ou de quelque chose que vous effectuez avec la redirection de flux.

Stocke les caractères unicode dans un fichier:

Enregistrez ceci dans le fichier: foo.py:

#!/usr/bin/python -tt
# -*- coding: utf-8 -*-
import codecs
import sys 
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
print(u'e with obfuscation: é')

Exécutez-le et dirigez la sortie vers le fichier:

python foo.py > tmp.txt

Ouvrez tmp.txt et regardez à l'intérieur, vous voyez ceci:

el@apollo:~$ cat tmp.txt 
e with obfuscation: é

Ainsi, vous avez enregistré unicode avec un repère d’obscurcissement dans un fichier.

40
Eric Leschinski

Si vous essayez de _print() Unicode et obtenez des erreurs de codec Ascii, consultez cette page , dont le TLDR est do export PYTHONIOENCODING=UTF-8 avant de lancer python (cette variable contrôle la séquence d'octets que la console tente pour encoder vos données de chaîne comme). En interne, Python3 utilise UTF-8 par défaut (voir le HOWTO Unicode ), ce n'est donc pas le problème; vous pouvez simplement mettre Unicode dans des chaînes, comme indiqué dans les autres réponses et commentaires. C'est lorsque vous essayez de transférer ces données sur votre console que le problème se produit. Python pense que votre console ne peut gérer que l’ascii. Certaines des autres réponses disent, "Écris-le d'abord dans un fichier" mais notent qu'elles spécifient le codage (UTF-8) pour le faire (donc, Python ne change rien en écriture), puis utilise une méthode de lecture le fichier qui crache les octets sans aucun égard pour l'encodage, c'est pourquoi cela fonctionne.

19
Tom Hundt

En Python 2, vous déclarez des chaînes unicode avec un u, comme dans u"猫", et vous utilisez respectivement decode() et encode() pour traduire en unicode.

C'est un peu plus facile avec Python 3. Un très bon aperçu peut être trouvé ici . Cette présentation a clarifié beaucoup de choses pour moi.

18
Steven Burnap

J'utilise Portable winpython dans Windows, il comprend la console IPython QT, je pourrais réaliser ce qui suit.

>>>print ("結婚")
結婚

>>>print ("おはよう")
おはよう

>>>str = "結婚"


>>>print (str)
結婚

votre interprète de console devrait prendre en charge unicode afin d'afficher les caractères unicode.

4
MusuNaji

Encore une chose qui n'a pas encore été ajoutée

En Python 2, si vous souhaitez imprimer une variable comportant unicode et utiliser .format(), procédez comme suit (faites en sorte que la chaîne de base mise en forme soit une chaîne unicode avec u'':

>>> text = "Université de Montréal"
>>> print(u"This is unicode: {}".format(text))
>>> This is unicode: Université de Montréal
1
Sheshank S.

Considérant qu'il s'agit du premier résultat de dépassement de pile lorsque Google recherche ce sujet, il convient de mentionner que le préfixage de u aux chaînes unicode est facultatif dans Python 3. (L'exemple Python 2 a été copié à partir de la réponse en haut)

Python 3 (les deux fonctionnent):

print('\u0420\u043e\u0441\u0441\u0438\u044f')
print(u'\u0420\u043e\u0441\u0441\u0438\u044f')

Python 2:

print u'\u0420\u043e\u0441\u0441\u0438\u044f'
0
Evan

Cela corrige l'impression UTF-8 en python:

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
0
Nadav B