¿Cómo imprimir caracteres Unicode en Python?

115

Quiero hacer un diccionario donde las palabras en inglés apunten a traducciones al ruso y al francés.

¿Cómo imprimo caracteres Unicode en Python? Además, ¿cómo se almacenan los caracteres Unicode en una variable?

NoobDev4iPhone
fuente
¿Esto ayuda ?: docs.python.org/howto/unicode.html
paulsm4
Echa un vistazo aquí . Prefijar sus cadenas con upermite que Python las considere como literales de cadena Unicode.
SRI

Respuestas:

109

Para incluir caracteres Unicode en su código fuente de Python, puede usar caracteres de escape Unicode en el formulario \u0123de su cadena y anteponer la literal de cadena con 'u'.

A continuación, se muestra un ejemplo que se ejecuta en la consola interactiva de Python:

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

Las cadenas declaradas así son variables de tipo Unicode, como se describe en la documentación de Python Unicode .

Si ejecutar el comando anterior no muestra el texto correctamente, quizás su terminal no sea capaz de mostrar caracteres Unicode.

Para obtener información sobre cómo leer datos Unicode de un archivo, consulte esta respuesta:

Lectura de caracteres de un archivo en Python

Matt Ryall
fuente
4
Sí, puede escribir su código en archivos de texto codificados en Unicode, pero muchos editores y herramientas tienen problemas para manejarlos. Mi experiencia trabajando con código fuente en muchas plataformas diferentes ha sido que es mejor mantener el código fuente en ASCII y usar escapes Unicode.
Matt Ryall
3
@MattRyall, estoy de acuerdo, pero un equipo de desarrolladores rusos puede querer escribir comentarios y cadenas de documentación en ruso. Para un proyecto de idiomas es una buena opción.
Johan Lundberg
3
Aunque tenga en cuenta que esto solo funciona si imprime solo la cadena. Si está envuelto en algún otro objeto, verá códigos de escape. Intente "imprimir [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']" por ejemplo.
btubbs
3
¿Qué pasa si lo guardo en una cadena mystr? entonces, ¿cómo imprimirlo?
cqcn1991
1
@CarloWood La respuesta principal te dice exactamente lo que quieres. Justprint your_unicode_characters.encode('utf-8')
Yuhao Zhang
48

Imprima un carácter Unicode en Python:

Imprima un carácter Unicode directamente desde el intérprete de Python:

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

El carácter Unicode u'\u2713'es una marca de verificación. El intérprete imprime la marca de verificación en la pantalla.

Imprima un carácter unicode desde un script de Python:

Pon esto en test.py:

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

Ejecútelo así:

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

Si no muestra una marca de verificación, entonces el problema podría estar en otra parte, como la configuración del terminal o algo que esté haciendo con la redirección de transmisión.

Almacene caracteres Unicode en un archivo:

Guarde esto en el archivo: 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: é')

Ejecútelo y canalice la salida al archivo:

python foo.py > tmp.txt

Abra tmp.txt y mire dentro, verá esto:

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

Por lo tanto, ha guardado unicode e con una marca de ofuscación en un archivo.

Eric Leschinski
fuente
@ ofer.sheffer extrañamente estoy aquí buscando resolver el problema opuesto, el punto es que puede tomar algo de manipulación.
Chris H
40

Si está intentandoprint() usar Unicode y obtiene errores de códec ascii , consulte esta página , cuyo TLDR se realiza export PYTHONIOENCODING=UTF-8antes de iniciar Python (esta variable controla la secuencia de bytes que la consola intenta codificar sus datos de cadena). Internamente, Python3 usa UTF-8 por defecto (vea el COMO de Unicode) entonces ese no es el problema; simplemente puede poner Unicode en cadenas, como se ve en las otras respuestas y comentarios. Es cuando intenta sacar estos datos a su consola cuando ocurre el problema. Python cree que su consola solo puede manejar ascii. Algunas de las otras respuestas dicen, "Escríbalo en un archivo, primero", pero tenga en cuenta que especifican la codificación (UTF-8) para hacerlo (por lo tanto, Python no cambia nada por escrito) y luego usan un método para leer el archivo que simplemente escupe los bytes sin tener en cuenta la codificación, por lo que funciona.

Tom Hundt
fuente
¡Gracias! Tuve un problema de Unicde al usar el paquete asciitree para escribir resultados en un archivo. Esto me lo resolvió.
Pål Thingbø
Muchas gracias. Pasé horas buscando en Google, me alegro de haber encontrado esto.
CharlyDelta
17

En Python 2, declaras cadenas unicode con a u, como en u"猫"y usa decode()y encode()para traducir hacia y desde unicode, respectivamente.

Es bastante más fácil en Python 3. Aquí se puede encontrar una muy buena descripción general . Esa presentación me aclaró muchas cosas.

Gort el robot
fuente
1
Gracias por el enlace del video. Es muy útil.
Arun
1
Esto también está disponible como un no video aquí: Pragmatic Unicode, o, ¿Cómo detengo el dolor? (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt
7

Teniendo en cuenta que este es el primer resultado de desbordamiento de pila cuando Google busca este tema, vale la pena mencionar que el prefijo ude cadenas Unicode es opcional en Python 3. (el ejemplo de Python 2 se copió de la respuesta superior)

Python 3 (ambos funcionan):

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
fuente
¡Gracias! Exactamente lo que busqué: una forma universal de imprimir un carácter unicode dentro de una cadena tanto para python2 como para python3.
JenyaKh
la versión sujeta también debería funcionar en Phyton 2; las abrazaderas son una opción y, por lo tanto, están permitidas.
Alexander Stohr
4

Utilizo Portable winpython en Windows, incluye la consola IPython QT, podría lograr lo siguiente.

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

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

>>>str = "結婚"


>>>print (str)
結婚

su intérprete de consola debe ser compatible con Unicode para poder mostrar caracteres Unicode.

IdontCareAcerca deReputaciónPuntos
fuente
3

Solo una cosa más que aún no se ha agregado

En Python 2, si desea imprimir una variable que tiene unicode y usar .format(), haga esto (haga que la cadena base que se está formateando sea una cadena unicode con u'':

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

Esto corrige la impresión UTF-8 en Python:

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

Reemplace '+' con '000' . Por ejemplo, 'U + 1F600' se convertirá en 'U0001F600' y antepondrá el código Unicode con "\" e imprimirá. Ejemplo:

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

Marque esto, tal vez ayude a Python Unicode Emoji

bendito
fuente