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?
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?
Risposte:
Per includere caratteri Unicode nel codice sorgente Python, puoi utilizzare caratteri di escape Unicode nel modulo \u0123
nella 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:
mystr
? allora come stamparlo?
print your_unicode_characters.encode('utf-8')
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.
Se stai provando a print()
Unicode e ricevi errori del codec ASCII , controlla questa pagina , il cui TLDR è fatto export PYTHONIOENCODING=UTF-8
prima 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.
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.
Considerando che questo è il primo risultato di overflow dello stack quando Google cerca questo argomento, vale la pena ricordare che il prefisso u
alle 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'
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.
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
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