Jak wydrukować znak Unicode w Pythonie?

115

Chcę stworzyć słownik, w którym angielskie słowa wskazują na rosyjskie i francuskie tłumaczenia.

Jak wydrukować znaki Unicode w Pythonie? Ponadto, jak przechowywać znaki Unicode w zmiennej?

NoobDev4iPhone
źródło
Czy to pomoże: docs.python.org/howto/unicode.html
paulsm4
Zajrzyj tutaj . Prefiks twoich ciągów uumożliwia Pythonowi traktowanie ich jako literałów znaków Unicode.
SRI

Odpowiedzi:

109

Aby uwzględnić znaki Unicode w kodzie źródłowym Pythona, możesz użyć znaków zmiany znaczenia Unicode w formularzu \u0123w ciągu i poprzedzić literał ciągu znakiem „u”.

Oto przykład działający w interaktywnej konsoli Pythona:

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

Zadeklarowane w ten sposób ciągi znaków są zmiennymi typu Unicode, zgodnie z opisem w dokumentacji Python Unicode .

Jeśli uruchomienie powyższego polecenia nie wyświetla poprawnie tekstu, być może twój terminal nie jest w stanie wyświetlać znaków Unicode.

Aby uzyskać informacje na temat odczytywania danych Unicode z pliku, zobacz tę odpowiedź:

Odczyt znaków z pliku w Pythonie

Matt Ryall
źródło
4
Tak, można napisać kod w Unicode zakodowanych plików tekstowych, ale wiele edytorów i narzędzi mieć kłopot z nimi. Z mojego doświadczenia w pracy z kodem źródłowym na wielu różnych platformach wynika, że ​​najlepiej przechowywać kod źródłowy w ASCII i używać znaków unikodowych.
Matt Ryall
3
@MattRyall, zgadzam się, ale zespół rosyjskich programistów może chcieć pisać komentarze i dokumenty po rosyjsku. W przypadku projektu językowego to dobra opcja.
Johan Lundberg
3
Pamiętaj jednak, że działa to tylko wtedy, gdy drukujesz tylko ciąg. Jeśli jest opakowany w jakiś inny obiekt, zobaczysz kody ucieczki. Spróbuj na przykład „drukuj [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']”.
btubbs
3
A jeśli zapiszę go w łańcuchu mystr? więc jak to wydrukować?
cqcn1991
1
@CarloWood Najlepsza odpowiedź mówi dokładnie, czego chcesz. Po prostuprint your_unicode_characters.encode('utf-8')
Yuhao Zhang
48

Wydrukuj znak Unicode w Pythonie:

Wydrukuj znak Unicode bezpośrednio z interpretera Pythona:

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

Znak Unicode u'\u2713'to znacznik wyboru. Tłumacz drukuje znacznik wyboru na ekranie.

Wydrukuj znak Unicode ze skryptu Pythona:

Umieść to w test.py:

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

Uruchom to w ten sposób:

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

Jeśli nie wyświetla znacznika wyboru, problem może być gdzie indziej, na przykład w ustawieniach terminala lub czymś, co robisz z przekierowaniem strumienia.

Przechowuj znaki Unicode w pliku:

Zapisz to do pliku: 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: é')

Uruchom go i potokuj wyjście do pliku:

python foo.py > tmp.txt

Otwórz tmp.txt i zajrzyj do środka, zobaczysz to:

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

W ten sposób zapisałeś unicode e ze znakiem zaciemnienia do pliku.

Eric Leschinski
źródło
@ ofer.sheffer dziwne, szukam tutaj rozwiązania przeciwnego problemu, chodzi o to, że może to zająć trochę czasu.
Chris H
40

Jeśli próbujesz print()Unicode i otrzymujesz błędy kodeka ascii , sprawdź tę stronę , której TLDR jest wykonywany export PYTHONIOENCODING=UTF-8przed uruchomieniem Pythona (ta zmienna kontroluje sekwencję bajtów, którą konsola próbuje zakodować dane ciągu). Wewnętrznie Python3 używa domyślnie UTF-8 (patrz Unicode HOWTO) więc to nie jest problem; możesz po prostu umieścić Unicode w łańcuchach, jak widać w innych odpowiedziach i komentarzach. Problem się pojawia, gdy próbujesz przesłać te dane do konsoli. Python uważa, że ​​twoja konsola obsługuje tylko ascii. Niektóre inne odpowiedzi mówią: „Najpierw zapisz to do pliku”, ale pamiętaj, że określają kodowanie (UTF-8), aby to zrobić (więc Python nie zmienia niczego na piśmie), a następnie używa metody do czytania plik, który po prostu wypluwa bajty bez zwracania uwagi na kodowanie, dlatego to działa.

Tom Hundt
źródło
Dziękuję Ci! Miałem problem z unicde podczas używania pakietu asciitree do zapisywania wyników do pliku. To rozwiązało to dla mnie.
Pål Thingbø
Dziękuję bardzo. Spędziłem godziny na googlowaniu, cieszę się, że to znalazłem.
CharlyDelta,
17

W Pythonie 2 deklaruje się ciągi znaków Unicode za pomocą odpowiednio a u, as in u"猫"oraz używamy decode()i encode()do tłumaczenia odpowiednio na iz Unicode.

W Pythonie 3 jest to trochę łatwiejsze. Bardzo dobry przegląd można znaleźć tutaj . Ta prezentacja wyjaśniła mi wiele rzeczy.

Gort the Robot
źródło
1
Dzięki za łącze wideo. To jest bardzo użyteczne.
Arun
1
Jest to również dostępne jako nie-wideo tutaj: Pragmatic Unicode lub, Jak mogę zatrzymać ból? (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt
7

Biorąc pod uwagę, że jest to pierwszy wynik przepełnienia stosu podczas wyszukiwania w Google w tym temacie, warto wspomnieć, że prefiks udo ciągów znaków Unicode jest opcjonalny w Pythonie 3. (przykład Pythona 2 został skopiowany z górnej odpowiedzi).

Python 3 (oba działają):

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
źródło
Dziękuję Ci! Dokładnie to, czego szukałem: uniwersalny sposób drukowania znaku Unicode w ciągu znaków zarówno dla python2, jak i python3.
JenyaKh
wersja zaciskowa powinna działać również w Phyton 2 - zaciski są opcją i dlatego są dozwolone.
Alexander Stohr,
4

Używam przenośnego winpythona w systemie Windows, zawiera konsolę IPython QT, mogę osiągnąć następujące rezultaty.

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

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

>>>str = "結婚"


>>>print (str)
結婚

Twój interpreter konsoli powinien obsługiwać Unicode, aby wyświetlać znaki Unicode.

IdontCareAboutReputationPoints
źródło
3

Jeszcze jedna rzecz, która nie została jeszcze dodana

W Pythonie 2, jeśli chcesz wydrukować zmienną, która ma Unicode i użyć .format(), zrób to (utwórz ciąg bazowy, który jest formatowany, jako ciąg znaków Unicode z u'':

>>> text = "Université de Montréal"
>>> print(u"This is unicode: {}".format(text))
>>> This is unicode: Université de Montréal
Sheshank S.
źródło
3

To naprawia drukowanie UTF-8 w Pythonie:

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
Nadav B
źródło
1

Wymienić '+' z '000' . Na przykład „U + 1F600” zmieni się na „U0001F600” i będzie poprzedzać kod Unicode znakiem „\” i drukować. Przykład:

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

Sprawdź to, może pomoże to emoji Unicode w Pythonie

błogosławiony
źródło