Wie drucke ich Unicode-Zeichen in Python?

115

Ich möchte ein Wörterbuch erstellen, in dem englische Wörter auf russische und französische Übersetzungen verweisen.

Wie drucke ich Unicode-Zeichen in Python aus? Wie speichert man Unicode-Zeichen in einer Variablen?

NoobDev4iPhone
quelle
Schauen Sie hier . Wenn Sie Ihren Zeichenfolgen ein Präfix voranstellen, ukann Python sie als Unicode-Zeichenfolgenliterale betrachten.
SRI

Antworten:

109

Um Unicode-Zeichen in Ihren Python-Quellcode aufzunehmen, können Sie Unicode-Escape-Zeichen im Formular \u0123in Ihrer Zeichenfolge verwenden und dem Zeichenfolgenliteral 'u' voranstellen.

Hier ist ein Beispiel, das in der interaktiven Python-Konsole ausgeführt wird:

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

So deklarierte Zeichenfolgen sind Variablen vom Typ Unicode, wie in der Python Unicode-Dokumentation beschrieben .

Wenn das Ausführen des obigen Befehls den Text für Sie nicht korrekt anzeigt, kann Ihr Terminal möglicherweise keine Unicode-Zeichen anzeigen.

Informationen zum Lesen von Unicode-Daten aus einer Datei finden Sie in dieser Antwort:

Lesen von Zeichen aus einer Datei in Python

Matt Ryall
quelle
4
Ja, Sie können Ihren Code in Unicode-codierte Textdateien schreiben, aber viele Editoren und Tools haben Probleme damit. Meine Erfahrung mit der Arbeit mit Quellcode auf vielen verschiedenen Plattformen hat gezeigt, dass es am besten ist, den Quellcode in ASCII zu belassen und Unicode-Escapezeichen zu verwenden.
Matt Ryall
3
@MattRyall, ich stimme zu, aber ein Team russischer Entwickler möchte möglicherweise Kommentare und Dokumentationszeichen auf Russisch schreiben. Für ein Sprachprojekt ist es eine gute Option.
Johan Lundberg
3
Beachten Sie jedoch, dass dies nur funktioniert, wenn Sie nur die Zeichenfolge drucken. Wenn es in ein anderes Objekt eingeschlossen ist, werden Escape-Codes angezeigt. Versuchen Sie beispielsweise "print [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']".
Btubbs
3
Was ist, wenn ich es in einer Zeichenfolge gespeichert habe mystr? wie drucke ich es dann aus?
cqcn1991
1
@CarloWood Die Top-Antwort sagt Ihnen genau, was Sie wollen. Nurprint your_unicode_characters.encode('utf-8')
Yuhao Zhang
48

Drucken Sie ein Unicode-Zeichen in Python:

Drucken Sie ein Unicode-Zeichen direkt vom Python-Interpreter:

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

Das Unicode-Zeichen u'\u2713'ist ein Häkchen. Der Dolmetscher druckt das Häkchen auf dem Bildschirm.

Drucken Sie ein Unicode-Zeichen aus einem Python-Skript:

Setzen Sie dies in test.py:

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

Führen Sie es so aus:

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

Wenn für Sie kein Häkchen angezeigt wird, liegt das Problem möglicherweise an einer anderen Stelle, z. B. bei den Terminaleinstellungen oder bei der Stream-Umleitung.

Speichern Sie Unicode-Zeichen in einer Datei:

Speichern Sie dies in der Datei: 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: é')

Führen Sie es aus und leiten Sie die Ausgabe an die Datei weiter:

python foo.py > tmp.txt

Öffnen Sie tmp.txt und schauen Sie hinein. Sie sehen Folgendes:

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

Sie haben also Unicode e mit einem Verschleierungszeichen in einer Datei gespeichert.

Eric Leschinski
quelle
@ ofer.sheffer bizarrerweise bin ich hier, um das gegenteilige Problem zu lösen. Der Punkt ist, dass es einige Fummelei erfordern kann.
Chris H
40

Wenn Sie versuchen, print()Unicode zu verwenden, und ASCII-Codec-Fehler erhalten , lesen Sie diese Seite , deren TLDR export PYTHONIOENCODING=UTF-8vor dem Starten von Python ausgeführt wird (diese Variable steuert, in welcher Bytefolge die Konsole versucht, Ihre Zeichenfolgendaten zu codieren). Intern verwendet Python3 standardmäßig UTF-8 (siehe Unicode-HOWTO)) das ist also nicht das Problem; Sie können Unicode einfach in Zeichenfolgen einfügen, wie in den anderen Antworten und Kommentaren zu sehen ist. Wenn Sie versuchen, diese Daten an Ihre Konsole zu übertragen, tritt das Problem auf. Python glaubt, dass Ihre Konsole nur ASCII verarbeiten kann. Einige der anderen Antworten sagen: "Schreiben Sie es zuerst in eine Datei", beachten Sie jedoch, dass sie die Codierung (UTF-8) dafür angeben (Python ändert also nichts schriftlich) und verwenden dann eine Methode zum Lesen Die Datei, die nur die Bytes ausspuckt, ohne Rücksicht auf die Codierung, weshalb dies funktioniert.

Tom Hundt
quelle
Danke dir! Ich hatte ein Unicde-Problem, als ich das asciitree-Paket zum Schreiben von Ergebnissen in eine Datei verwendete. Das hat es für mich gelöst.
Pål Thingbø
Ich danke dir sehr. Ich habe stundenlang gegoogelt und bin froh, dass ich das gefunden habe.
CharlyDelta
17

In Python 2 deklarieren Sie Unicode-Zeichenfolgen mit einem u, wie in u"猫"und verwenden decode()und encode()um in bzw. aus Unicode zu übersetzen.

In Python 3 ist es viel einfacher. Eine sehr gute Übersicht finden Sie hier . Diese Präsentation hat mir viele Dinge klargestellt.

Gort den Roboter
quelle
1
Danke für den Videolink. Es ist sehr nützlich.
Arun
1
Dies ist hier auch als Nicht-Video verfügbar: Pragmatischer Unicode oder Wie stoppe ich den Schmerz? (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt
7

In Anbetracht der Tatsache, dass dies das erste Stapelüberlaufergebnis bei der Google-Suche in diesem Thema ist, muss erwähnt werden, dass das Präfixieren uvon Unicode-Zeichenfolgen in Python 3 optional ist. (Python 2-Beispiel wurde aus der oberen Antwort kopiert.)

Python 3 (beide funktionieren):

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
quelle
Danke dir! Genau das, wonach ich gesucht habe: eine universelle Möglichkeit, ein Unicode-Zeichen in einer Zeichenfolge sowohl für Python2 als auch für Python3 zu drucken.
JenyaKh
Die geklemmte Version sollte auch in Phyton 2 funktionieren - Klemmen sind eine Option und daher zulässig.
Alexander Stohr
4

Ich verwende Portable Winpython in Windows, es enthält IPython QT-Konsole, ich könnte Folgendes erreichen.

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

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

>>>str = "結婚"


>>>print (str)
結婚

Ihr Konsoleninterpreter sollte Unicode unterstützen, um Unicode-Zeichen anzuzeigen.

IdontCareAboutReputationPoints
quelle
3

Nur noch eine Sache, die noch nicht hinzugefügt wurde

Wenn Sie in Python 2 eine Variable mit Unicode drucken und verwenden möchten .format(), gehen Sie folgendermaßen vor: Machen Sie die zu formatierende Basiszeichenfolge zu einer Unicode-Zeichenfolge mit u'':

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

Dies behebt den UTF-8-Druck in Python:

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

Ersetzen Sie '+' durch '000' . Beispielsweise wird 'U + 1F600' zu 'U0001F600' und stellt dem Unicode-Code "\" voran und druckt. Beispiel:

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

Überprüfen Sie dies, vielleicht hilft es Python Unicode Emoji

gesegnet
quelle