Python'da Unicode karakteri nasıl yazdırılır?


115

İngilizce kelimelerin Rusça ve Fransızca çevirileri işaret ettiği bir sözlük yapmak istiyorum.

Python'da unicode karakterleri nasıl yazdırırım? Ayrıca, unicode karakterleri bir değişkende nasıl saklarsınız?



Buraya bir göz atın . Dizelerinizin önekini ukoymak, python'un bunları unicode dize değişmezleri olarak değerlendirmesine izin verir.
SRI

Yanıtlar:


109

Python kaynak kodunuza Unicode karakterleri eklemek için , dizenizdeki formda Unicode kaçış karakterlerini kullanabilir \u0123ve dize değişmezinin önüne 'u' ekleyebilirsiniz .

İşte Python etkileşimli konsolunda çalışan bir örnek:

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

Bu şekilde bildirilen dizeler, Python Unicode belgelerinde açıklandığı gibi Unicode türü değişkenlerdir .

Yukarıdaki komutu çalıştırmak metni sizin için doğru şekilde görüntülemiyorsa, belki de terminaliniz Unicode karakterlerini görüntüleyemiyordur.

Bir dosyadan Unicode verilerini okuma hakkında bilgi için şu yanıta bakın:

Python'da dosyadan karakter okuma


4
Evet, yapabilirsiniz Unicode ile kodlanmış metin dosyaları içinde kod yazmak, ancak editörler ve pek çok araç onlarla sorun konu işlemi var. Pek çok farklı platformda kaynak kodla çalışma deneyimim, kaynak kodunu ASCII'de tutmanın ve Unicode kaçışlarını kullanmanın en iyisi olduğu olmuştur.
Matt Ryall

3
@MattRyall, katılıyorum, ancak Rus geliştiricilerden oluşan bir ekip Rusça yorum ve dokümanlar yazmak isteyebilir. Bir dil projesi için bu iyi bir seçenektir.
Johan Lundberg

3
Bununla birlikte, bunun yalnızca dizeyi yazdırırsanız çalıştığını unutmayın. Başka bir nesneye sarılmışsa, kaçış kodlarını göreceksiniz. Örneğin, "[u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f'] yazdır" deneyin.
btubbs

3
Ya onu bir dizede saklarsam mystr? o zaman nasıl yazdırılır?
cqcn1991

1
@CarloWood En iyi cevap size tam olarak ne istediğinizi söyler. Sadeceprint your_unicode_characters.encode('utf-8')
Yuhao Zhang

48

Python'da bir unicode karakteri yazdırın:

Doğrudan python yorumlayıcısından bir unicode karakteri yazdırın:

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

Unicode karakteri u'\u2713'bir onay işaretidir. Yorumlayıcı, onay işaretini ekrana yazdırır.

Bir python komut dosyasından bir unicode karakteri yazdırın:

Bunu test.py'ye koyun:

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

Şu şekilde çalıştırın:

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

Sizin için bir onay işareti göstermiyorsa, sorun başka bir yerde olabilir, örneğin uçbirim ayarları veya akış yeniden yönlendirmeyle yaptığınız bir şey olabilir.

Unicode karakterlerini bir dosyada saklayın:

Bunu dosyaya kaydedin: 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: é')

Çalıştırın ve çıktıyı dosyaya yönlendirin:

python foo.py > tmp.txt

Tmp.txt dosyasını açın ve içine bakın, şunu görürsünüz:

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

Böylelikle unicode e'yi bir dosyaya gizleme işareti ile kaydettiniz.


@ ofer.sheffer tuhaf bir şekilde tam tersi sorunu çözmek için buradayım, asıl mesele biraz kafa karıştırıcı olabilir.
Chris H

40

Eğer çalışıyorsanız print()Unicode ve ASCII codec'i hataları alıyorsanız , kontrol bu sayfayı , TLDR hangi do export PYTHONIOENCODING=UTF-8piton (Ne konsol çalışır gibi dize verileri kodlamak için bayt dizisi bu değişken kontrolleri) kadar ateş önce. Dahili olarak, Python3 varsayılan olarak UTF-8 kullanır ( Unicode NASIL) yani sorun bu değil; Diğer yanıtlarda ve yorumlarda görüldüğü gibi, Unicode'u dizelere koyabilirsiniz. Sorun, bu verileri konsolunuza götürmeye çalıştığınızda gerçekleşir. Python, konsolunuzun yalnızca ascii'yi işleyebileceğini düşünüyor. Diğer yanıtlardan bazıları "Önce bir dosyaya yaz" der, ancak bunu yapmak için kodlamayı (UTF-8) belirlediklerini unutmayın (bu nedenle Python, yazılı olarak hiçbir şeyi değiştirmez) ve ardından okuma için bir yöntem kullanır. sadece baytları kodlamaya bakmaksızın tüküren dosya, işte bu yüzden çalışıyor.


Teşekkür ederim! Sonuçları bir dosyaya yazmak için asciitree paketini kullanırken bir unicde sorunu yaşadım. Bu benim için çözdü.
Pål Thingbø

Çok teşekkür ederim. Googling saatler geçirdim, bunu bulduğuma sevindim.
CharlyDelta

17

Python 2, bir ile unicode dizeleri beyan uolduğu gibi u"猫"ve kullanım decode()ve encode()ve sırasıyla unicode dan çevirmek.

Çok iyi genel bakış bulunabilir Python 3. A'da biraz daha kolay burada . Bu sunum benim için pek çok şeyi açıklığa kavuşturdu.


1
Video bağlantısı için teşekkürler. Bu çok kullanışlı.
arun

1
Bu, video olmayan olarak da burada mevcuttur: Pragmatic Unicode veya, Ağrıyı nasıl durdurabilirim? (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt

7

Bunun, google bu konuyu ararken ilk yığın taşması sonucu olduğunu düşünürsek, uPython 3'te unicode dizelere önek eklemenin isteğe bağlı olduğunu belirtmek gerekir (Python 2 örneği en üstteki cevaptan kopyalanmıştır)

Python 3 (ikisi de çalışır):

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'

Teşekkür ederim! Tam olarak aradığım şey: hem python2 hem de python3 için bir dize içinde bir unicode karakteri yazdırmanın evrensel bir yolu.
JenyaKh

kelepçeli versiyon Phyton 2'de de çalışmalıdır - kelepçeler bir seçenektir ve bu nedenle kullanılabilir.
Alexander Stohr

4

Windows'ta Portable winpython kullanıyorum, IPython QT konsolu içeriyor, aşağıdakileri yapabilirim.

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

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

>>>str = "結婚"


>>>print (str)
結婚

konsol yorumlayıcınızın unicode karakterleri göstermesi için unicode'u desteklemesi gerekir.


3

Henüz eklenmemiş bir şey daha

Python 2'de, unicode içeren bir değişken yazdırmak ve kullanmak istiyorsanız .format(), bunu yapın (biçimlendirilen temel dizeyi şununla bir unicode dizesi yapın u'':

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

3

Bu, python'da UTF-8 yazdırmayı düzeltir:

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

1

"+""000" ile değiştirin . Örneğin, 'U + 1F600' , 'U0001F600' olur ve Unicode kodunu başına "\" ekler ve yazdırır. Misal:

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

Bunu kontrol et, belki python unicode emojisine yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.