Come stampare il carattere Unicode in Python?


115

Voglio creare un dizionario in cui le parole inglesi rimandano alle traduzioni in russo e francese.

Come faccio a stampare i caratteri Unicode in Python? Inoltre, come si memorizzano i caratteri Unicode in una variabile?



Dai un'occhiata qui . Il prefisso delle stringhe con uconsente a python di considerarle come letterali stringa unicode.
SRI

Risposte:


109

Per includere caratteri Unicode nel codice sorgente Python, puoi utilizzare caratteri di escape Unicode nel modulo \u0123nella stringa e anteporre alla stringa letterale "u".

Ecco un esempio in esecuzione nella console interattiva Python:

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

Le stringhe dichiarate in questo modo sono variabili di tipo Unicode, come descritto nella documentazione di Python Unicode .

Se l'esecuzione del comando precedente non visualizza correttamente il testo, forse il tuo terminale non è in grado di visualizzare i caratteri Unicode.

Per informazioni sulla lettura dei dati Unicode da un file, vedere questa risposta:

Lettura di caratteri da file in Python


4
Sì, puoi scrivere il tuo codice in file di testo con codifica Unicode, ma molti editor e strumenti hanno problemi a gestirli. La mia esperienza nel lavorare con il codice sorgente su molte piattaforme diverse è stata che è meglio mantenere il codice sorgente in ASCII e utilizzare gli escape Unicode.
Matt Ryall

3
@ MattRyall, sono d'accordo, ma un team di sviluppatori russi potrebbe voler scrivere commenti e docstring in russo. Per un progetto linguistico è una buona opzione.
Johan Lundberg

3
Nota che funziona solo se stampi solo la stringa. Se è avvolto in qualche altro oggetto vedrai i codici di escape. Prova ad esempio "print [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']".
btubbs

3
E se lo memorizzassi in una stringa mystr? allora come stamparlo?
cqcn1991

1
@CarloWood La risposta migliore ti dice esattamente quello che vuoi. Soloprint your_unicode_characters.encode('utf-8')
Yuhao Zhang

48

Stampa un carattere Unicode in Python:

Stampa un carattere Unicode direttamente dall'interprete Python:

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

Il carattere Unicode u'\u2713'è un segno di spunta. L'interprete stampa il segno di spunta sullo schermo.

Stampa un carattere Unicode da uno script Python:

Mettilo in test.py:

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

Eseguilo in questo modo:

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

Se non mostra un segno di spunta per te, il problema potrebbe essere altrove, come le impostazioni del terminale o qualcosa che stai facendo con il reindirizzamento del flusso.

Memorizza i caratteri Unicode in un file:

Salvalo nel file: 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: é')

Eseguilo e convoglia l'output su file:

python foo.py > tmp.txt

Apri tmp.txt e guarda dentro, vedi questo:

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

Quindi hai salvato unicode e con un segno di offuscamento su di esso in un file.


@ ofer.sheffer stranamente sto cercando di risolvere il problema opposto, il punto è che potrebbe volerci un po 'di giocherellare.
Chris H

40

Se stai provando a print()Unicode e ricevi errori del codec ASCII , controlla questa pagina , il cui TLDR è fatto export PYTHONIOENCODING=UTF-8prima di attivare python (questa variabile controlla la sequenza di byte in cui la console tenta di codificare i dati della stringa). Internamente, Python3 utilizza UTF-8 per impostazione predefinita (vedere Unicode HOWTO) quindi non è questo il problema; puoi semplicemente mettere Unicode in stringhe, come si vede nelle altre risposte e commenti. È quando provi a trasferire questi dati sulla tua console che si verifica il problema. Python pensa che la tua console possa gestire solo ASCII. Alcune delle altre risposte dicono: "Scrivilo su un file, prima" ma nota che specificano la codifica (UTF-8) per farlo (quindi, Python non cambia nulla per iscritto), e quindi usa un metodo per leggere il file che sputa solo i byte senza alcun riguardo per la codifica, motivo per cui funziona.


Grazie! Ho avuto un problema con unicde durante l'utilizzo del pacchetto asciitree per scrivere i risultati su un file. Questo l'ha risolto per me.
Pål Thingbø

Grazie mille. Ho passato ore a cercare su Google, sono contento di averlo trovato.
CharlyDelta

17

In Python 2, dichiari le stringhe unicode con un u, come in u"猫"e usi decode()e encode()per tradurre rispettivamente da e verso unicode.

È un po 'più semplice in Python 3. Un'ottima panoramica può essere trovata qui . Quella presentazione mi ha chiarito molte cose.


1
Grazie per il collegamento video. E 'molto utile.
arun

1
Questo è anche disponibile come non video qui: Unicode pragmatico o, come faccio a fermare il dolore? (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt

7

Considerando che questo è il primo risultato di overflow dello stack quando Google cerca questo argomento, vale la pena ricordare che il prefisso ualle stringhe Unicode è facoltativo in Python 3. (l'esempio di Python 2 è stato copiato dalla risposta in alto)

Python 3 (entrambi funzionano):

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'

Grazie! Esattamente quello che ho cercato: un modo universale per stampare un carattere Unicode all'interno di una stringa sia per python2 che per python3.
JenyaKh

la versione bloccata dovrebbe funzionare anche in Phyton 2 - i morsetti sono un'opzione e quindi consentiti.
Alexander Stohr

4

Uso Winpython portatile in Windows, include la console QT IPython, potrei ottenere quanto segue.

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

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

>>>str = "結婚"


>>>print (str)
結婚

il tuo interprete di console dovrebbe supportare Unicode per mostrare i caratteri Unicode.


3

Solo un'altra cosa che non è stata ancora aggiunta

In Python 2, se vuoi stampare una variabile che ha unicode e usa .format(), allora fallo (rendi la stringa di base che viene formattata una stringa unicode con u'':

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

3

Questo risolve la stampa UTF-8 in Python:

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)

1

Sostituisci "+" con "000" . Ad esempio, "U + 1F600" diventerà "U0001F600" e anteporrà al codice Unicode "\" e verrà stampato. Esempio:

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

Controlla questo forse aiuterà l' emoji unicode di Python

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.