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?
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?
Odpowiedzi:
Aby uwzględnić znaki Unicode w kodzie źródłowym Pythona, możesz użyć znaków zmiany znaczenia Unicode w formularzu \u0123
w 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ź:
mystr
? więc jak to wydrukować?
print your_unicode_characters.encode('utf-8')
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.
Jeśli próbujesz print()
Unicode i otrzymujesz błędy kodeka ascii , sprawdź tę stronę , której TLDR jest wykonywany export PYTHONIOENCODING=UTF-8
przed 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.
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.
Biorąc pod uwagę, że jest to pierwszy wynik przepełnienia stosu podczas wyszukiwania w Google w tym temacie, warto wspomnieć, że prefiks u
do 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'
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.
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
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