Comment imprimer un caractère Unicode en Python?

115

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

Comment imprimer des caractères Unicode en Python? De plus, comment stocker les caractères Unicode dans une variable?

NoobDev4iPhone
la source
Est-ce que cela aide: docs.python.org/howto/unicode.html
paulsm4
Jetez un œil ici . Le préfixe de vos chaînes avec upermet à python de les considérer comme des littéraux de chaîne Unicode.
SRI

Réponses:

109

Pour inclure des caractères Unicode dans votre code source Python, vous pouvez utiliser des caractères d'échappement Unicode dans le formulaire \u0123de 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 Python Unicode .

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

Pour plus d'informations sur la lecture des données Unicode à partir d'un fichier, consultez cette réponse:

Lecture de caractères à partir d'un fichier en Python

Matt Ryall
la source
4
Oui, vous pouvez écrire votre code dans des fichiers texte encodés en Unicode, mais de nombreux éditeurs et outils ont du mal à les gérer. Mon expérience de travail avec le code source sur de nombreuses plates-formes différentes a été qu'il est préférable de conserver le code source en ASCII et d'utiliser des échappements Unicode.
Matt Ryall
3
@MattRyall, je suis d'accord, mais une équipe de développeurs russes voudra peut-être écrire des commentaires et des docstrings en russe. Pour un projet linguistique, c'est une bonne option.
Johan Lundberg
3
Notez cependant que cela ne fonctionne que si vous n'imprimez que la chaîne. S'il est enveloppé dans un autre objet, vous verrez des codes d'échappement. Essayez par exemple "print [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']".
btubbs
3
Et si je l'ai stocké dans une chaîne mystr? alors comment l'imprimer?
cqcn1991
1
@CarloWood La première réponse vous indique exactement ce que vous voulez. Justprint your_unicode_characters.encode('utf-8')
Yuhao Zhang
48

Imprimez un caractère Unicode en Python:

Imprimez un caractère Unicode directement à partir de l'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.

Imprimez 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 ceci:

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

S'il ne montre pas de coche pour vous, le problème pourrait être ailleurs, comme les paramètres du terminal ou quelque chose que vous faites avec la redirection de flux.

Stockez 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 e avec une marque d'obfuscation dans un fichier.

Eric Leschinski
la source
@ ofer.sheffer bizarrement, je cherche ici à résoudre le problème inverse, le fait que cela peut prendre un peu de bidouillage.
Chris H
40

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

Tom Hundt
la source
Je vous remercie! J'ai eu un problème unicde lors de l'utilisation du package asciitree pour écrire les résultats dans un fichier. Cela a résolu le problème pour moi.
Pål Thingbø
Merci beaucoup. J'ai passé des heures à chercher sur Google, content d'avoir trouvé ça.
CharlyDelta
17

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

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

Gort le robot
la source
1
Thx pour le lien vidéo. C'est très utile.
arun
1
Ceci est également disponible en tant que non-vidéo ici: Unicode pragmatique, ou, Comment arrêter la douleur? (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt
7

Considérant qu'il s'agit du premier résultat de débordement de pile lors de la recherche sur Google dans ce sujet, il convient de mentionner que le préfixage des uchaînes Unicode est facultatif dans Python 3. (L'exemple Python 2 a été copié à partir de la première réponse)

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'
Evan
la source
Je vous remercie! Exactement ce que j'ai recherché: un moyen universel d'imprimer un caractère Unicode dans une chaîne à la fois pour python2 et python3.
JenyaKh le
la version serrée devrait également fonctionner dans Phyton 2 - les pinces sont une option et donc autorisées.
Alexander Stohr
4

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

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

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

>>>str = "結婚"


>>>print (str)
結婚

votre interpréteur de console doit prendre en charge unicode afin d'afficher les caractères unicode.

IdontCareAboutReputationPoints
la source
3

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

Dans Python 2, si vous souhaitez imprimer une variable qui a unicode et l'utiliser .format(), faites-le (faites de la chaîne de base qui est formatée 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
Sheshank S.
la source
3

Cela corrige l'impression UTF-8 en python:

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
Nadav B
la source
1

Remplacez «+» par «000» . Par exemple, 'U + 1F600' deviendra 'U0001F600' et ajoutera au code Unicode "\" et imprimera. Exemple:

>>> print("Learning : ", "\U0001F40D")
Learning :  🐍
>>> 

Vérifiez ceci peut-être que cela aidera python unicode emoji

béni
la source