Bagaimana cara mencetak karakter Unicode dengan Python?

115

Saya ingin membuat kamus di mana kata-kata bahasa Inggris mengarah ke terjemahan bahasa Rusia dan Prancis.

Bagaimana cara mencetak karakter unicode dengan Python? Juga, bagaimana Anda menyimpan karakter unicode dalam variabel?

NoobDev4iPhone
sumber
Apakah ini membantu: docs.python.org/howto/unicode.html
paulsm4
Lihat di sini . Mengawali string Anda dengan umemungkinkan python untuk menganggapnya sebagai literal string unicode.
SRI

Jawaban:

109

Untuk menyertakan karakter Unicode dalam kode sumber Python Anda, Anda dapat menggunakan karakter escape Unicode dalam formulir \u0123di string Anda, dan awali literal string dengan 'u'.

Berikut adalah contoh yang berjalan di konsol interaktif Python:

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

String yang dideklarasikan seperti ini adalah variabel tipe Unicode, seperti yang dijelaskan dalam dokumentasi Python Unicode .

Jika menjalankan perintah di atas tidak menampilkan teks dengan benar untuk Anda, mungkin terminal Anda tidak mampu menampilkan karakter Unicode.

Untuk informasi tentang membaca data Unicode dari file, lihat jawaban ini:

Membaca karakter dari file dengan Python

Matt Ryall
sumber
4
Ya, Anda dapat menulis kode Anda dalam file teks yang dikodekan Unicode, tetapi banyak editor dan alat mengalami kesulitan untuk menanganinya. Pengalaman saya dengan bekerja dengan kode sumber pada banyak platform berbeda adalah yang terbaik adalah menyimpan kode sumber dalam ASCII dan menggunakan pelarian Unicode.
Matt Ryall
3
@MattRyall, saya setuju, tetapi tim pengembang Rusia mungkin ingin menulis komentar dan dokumen dalam bahasa Rusia. Untuk proyek bahasa, ini adalah pilihan yang bagus.
Johan Lundberg
3
Meskipun perhatikan bahwa ini hanya berfungsi jika Anda hanya mencetak string. Jika itu dibungkus dengan beberapa objek lain, Anda akan melihat kode melarikan diri. Coba "cetak [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']" misalnya.
btubbs
3
Bagaimana jika saya menyimpannya menjadi string mystr? lalu bagaimana cara mencetaknya?
cqcn1991
1
@CarloWood Jawaban teratas memberi tahu Anda apa yang Anda inginkan. Hanyaprint your_unicode_characters.encode('utf-8')
Yuhao Zhang
48

Cetak karakter unicode dengan Python:

Cetak karakter unicode langsung dari interpreter python:

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

Karakter unicode u'\u2713'adalah tanda centang. Penerjemah mencetak tanda centang di layar.

Cetak karakter unicode dari skrip python:

Taruh ini di test.py:

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

Jalankan seperti ini:

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

Jika tidak menunjukkan tanda centang untuk Anda, maka masalahnya mungkin ada di tempat lain, seperti pengaturan terminal atau sesuatu yang Anda lakukan dengan pengalihan aliran.

Simpan karakter unicode dalam file:

Simpan ini ke 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: é')

Jalankan dan kirimkan output ke file:

python foo.py > tmp.txt

Buka tmp.txt dan lihat ke dalam, Anda akan melihat ini:

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

Jadi Anda telah menyimpan unicode e dengan tanda obfuscation di atasnya ke sebuah file.

Eric Leschinski
sumber
@ ofer.sheffer aneh Saya di sini mencari untuk memecahkan masalah yang berlawanan, intinya mungkin perlu beberapa mengutak-atik.
Chris H
40

Jika Anda mencoba print()Unicode, dan mendapatkan kesalahan codec ascii , lihat halaman ini , yang TLDR-nya dilakukan export PYTHONIOENCODING=UTF-8sebelum mengaktifkan python (variabel ini mengontrol urutan byte apa yang coba konsol untuk mengenkode data string Anda sebagai). Secara internal, Python3 menggunakan UTF-8 secara default (lihat Unicode HOWTO) jadi bukan itu masalahnya; Anda bisa meletakkan Unicode dalam string, seperti yang terlihat di jawaban dan komentar lain. Saat Anda mencoba dan mengeluarkan data ini ke konsol Anda, masalah terjadi. Python menganggap konsol Anda hanya dapat menangani ascii. Beberapa jawaban lain mengatakan, "Tulis ke file, dulu" tetapi perhatikan bahwa mereka menentukan pengkodean (UTF-8) untuk melakukannya (jadi, Python tidak mengubah apa pun secara tertulis), dan kemudian menggunakan metode untuk membaca file yang hanya mengeluarkan byte tanpa memperhatikan pengkodean, itulah sebabnya itu berfungsi.

Tom Hundt
sumber
Terima kasih! Saya mengalami masalah unik saat menggunakan paket asciitree untuk menulis hasil ke file. Ini menyelesaikannya untuk saya.
Pål Thingbø
Terima kasih banyak. Menghabiskan berjam-jam googling, senang saya menemukan ini.
CharlyDelta
17

Di Python 2, Anda mendeklarasikan string unicode dengan a u, as in u"猫"and use decode()and encode()to translate to and from unicode.

Ini agak lebih mudah dengan Python 3. Gambaran yang sangat bagus dapat ditemukan di sini . Presentasi itu mengklarifikasi banyak hal bagi saya.

Gort si Robot
sumber
1
Terima kasih untuk tautan video. Itu sangat berguna.
arun
1
Ini juga tersedia sebagai non-video di sini: Pragmatic Unicode, atau, Bagaimana cara menghentikan rasa sakit? (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt
7

Mengingat ini adalah hasil stack overflow pertama ketika google mencari topik ini, perlu disebutkan bahwa prefiks ustring unicode adalah opsional di Python 3. (contoh Python 2 disalin dari jawaban atas)

Python 3 (keduanya berfungsi):

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
sumber
Terima kasih! Persis yang saya cari: cara universal untuk mencetak karakter unicode di dalam string baik untuk python2 dan python3.
JenyaKh
versi yang dijepit harus bekerja di Phyton 2 juga - klem adalah opsi dan dengan demikian diperbolehkan.
Alexander Stohr
4

Saya menggunakan Winpython portabel di Windows, itu termasuk konsol IPython QT, saya dapat mencapai yang berikut.

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

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

>>>str = "結婚"


>>>print (str)
結婚

interpreter konsol Anda harus mendukung unicode untuk menampilkan karakter unicode.

IdontCareAboutReputationPoints
sumber
3

Hanya satu hal lagi yang belum ditambahkan

Di Python 2, jika Anda ingin mencetak variabel yang memiliki unicode dan digunakan .format(), lakukan ini (buat string dasar yang diformat menjadi string unicode dengan u'':

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

Ini memperbaiki pencetakan UTF-8 dengan python:

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

Ganti '+' dengan '000' . Misalnya, 'U + 1F600' akan menjadi 'U0001F600' dan menambahkan kode Unicode dengan "\" dan mencetak. Contoh:

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

Periksa ini mungkin itu akan membantu emoji unicode python

diberkati
sumber