Làm thế nào để in ký tự Unicode trong Python?


115

Tôi muốn tạo một từ điển trong đó các từ tiếng Anh trỏ đến bản dịch tiếng Nga và tiếng Pháp.

Làm cách nào để in ra các ký tự unicode trong Python? Ngoài ra, làm cách nào để bạn lưu trữ các ký tự unicode trong một biến?



Hãy xem ở đây . Đặt tiền tố chuỗi của bạn bằng ucho phép python coi chúng như là các ký tự chuỗi unicode.
SRI

Câu trả lời:


109

Để bao gồm các ký tự Unicode trong mã nguồn Python của bạn, bạn có thể sử dụng các ký tự thoát Unicode trong biểu mẫu \u0123trong chuỗi của bạn và đặt tiền tố chuỗi ký tự bằng 'u'.

Đây là một ví dụ đang chạy trong bảng điều khiển tương tác Python:

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

Các chuỗi được khai báo như thế này là các biến kiểu Unicode, như được mô tả trong tài liệu Python Unicode .

Nếu chạy lệnh trên không hiển thị văn bản chính xác cho bạn, có lẽ thiết bị đầu cuối của bạn không có khả năng hiển thị các ký tự Unicode.

Để biết thông tin về cách đọc dữ liệu Unicode từ một tệp, hãy xem câu trả lời sau:

Đọc ký tự từ tệp bằng Python


4
Vâng, bạn có thể viết mã của mình trong các tệp văn bản được mã hóa Unicode, nhưng rất nhiều trình chỉnh sửa và công cụ gặp khó khăn khi xử lý chúng. Kinh nghiệm của tôi khi làm việc với mã nguồn trên nhiều nền tảng khác nhau là tốt nhất nên giữ mã nguồn ở dạng ASCII và sử dụng các bản thoát Unicode.
Matt Ryall

3
@MattRyall, tôi đồng ý, nhưng một nhóm các nhà phát triển người Nga có thể muốn viết nhận xét và docstrings bằng tiếng Nga. Đối với một dự án ngôn ngữ, đó là một lựa chọn tốt.
Johan Lundberg

3
Mặc dù lưu ý rằng điều này chỉ hoạt động nếu bạn chỉ in chuỗi. Nếu nó được bọc trong một số vật thể khác, bạn sẽ thấy mã thoát. Hãy thử "print [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']".
btubbs

3
Điều gì sẽ xảy ra nếu tôi lưu trữ nó thành một chuỗi mystr? sau đó làm thế nào để in nó?
cqcn1991

1
@CarloWood Câu trả lời hàng đầu cho bạn biết chính xác những gì bạn muốn. Justprint your_unicode_characters.encode('utf-8')
Yuhao Zhang

48

In một ký tự unicode bằng Python:

In một ký tự unicode trực tiếp từ trình thông dịch python:

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

Ký tự Unicode u'\u2713'là một dấu kiểm. Trình thông dịch in dấu kiểm trên màn hình.

In một ký tự unicode từ tập lệnh python:

Đặt cái này vào test.py:

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

Chạy nó như thế này:

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

Nếu nó không hiển thị dấu kiểm cho bạn, thì vấn đề có thể nằm ở chỗ khác, chẳng hạn như cài đặt đầu cuối hoặc điều gì đó bạn đang làm với chuyển hướng luồng.

Lưu trữ các ký tự unicode trong một tệp:

Lưu cái này vào tệp: 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: é')

Chạy nó và chuyển đầu ra vào tệp:

python foo.py > tmp.txt

Mở tmp.txt và nhìn vào bên trong, bạn sẽ thấy:

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

Như vậy là bạn đã lưu unicode e với một dấu obfuscation trên nó vào một tệp.


@ ofer.sheffer kỳ lạ là tôi ở đây đang tìm cách giải quyết vấn đề ngược lại, vấn đề là nó có thể mất một vài thao tác.
Chris H

40

Nếu bạn đang cố gắng print()Unicode và gặp lỗi codec ascii , hãy xem trang này , TLDR trong đó được thực hiện export PYTHONIOENCODING=UTF-8trước khi kích hoạt python (biến này kiểm soát chuỗi byte mà bảng điều khiển cố gắng mã hóa dữ liệu chuỗi của bạn). Bên trong, Python3 sử dụng UTF-8 theo mặc định (xem Unicode HOWTO) vì vậy đó không phải là vấn đề; bạn chỉ có thể đặt Unicode trong chuỗi, như đã thấy trong các câu trả lời và nhận xét khác. Sự cố sẽ xảy ra khi bạn thử và đưa dữ liệu này ra bảng điều khiển của mình. Python cho rằng bảng điều khiển của bạn chỉ có thể xử lý ascii. Một số câu trả lời khác nói, "Trước tiên hãy ghi nó vào tệp" nhưng lưu ý rằng chúng chỉ định mã hóa (UTF-8) để làm như vậy (vì vậy, Python không thay đổi bất kỳ điều gì trong văn bản), và sau đó sử dụng một phương thức để đọc tệp tin chỉ xuất ra các byte mà không liên quan đến mã hóa, đó là lý do tại sao điều đó hoạt động.


Cảm ơn bạn! Tôi đã gặp sự cố unicde khi sử dụng gói asciitree để ghi kết quả vào tệp. Điều này đã giải quyết nó cho tôi.
Pål Thingbø

Cảm ơn bạn rất nhiều. Đã dành hàng giờ googling, rất vui vì tôi đã tìm thấy điều này.
CharlyDelta

17

Trong Python 2, bạn khai báo các chuỗi unicode với a u, as in u"猫"và use decode()andencode() để dịch sang và từ unicode tương ứng.

Nó khá dễ dàng hơn một chút trong Python 3. Có thể tìm thấy một cái nhìn tổng quan rất tốt ở đây . Bài thuyết trình đó đã làm sáng tỏ rất nhiều điều cho tôi.


1
Thx cho liên kết video. Nó rất hữu ích.
arun

1
Điều này cũng có sẵn dưới dạng video không phải là video ở đây: Unicode thực dụng, hoặc, Làm cách nào để ngăn chặn cơn đau? (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt

7

Xem xét rằng đây là kết quả tràn ngăn xếp đầu tiên khi google tìm kiếm chủ đề này, nó có đề cập đến tiền tố u cho chuỗi unicode là tùy chọn trong Python 3. (Ví dụ Python 2 đã được sao chép từ câu trả lời trên cùng)

Python 3 (cả hai đều hoạt động):

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'

Cảm ơn bạn! Chính xác những gì tôi đã tìm kiếm: một cách phổ biến để in một ký tự unicode bên trong một chuỗi cho cả python2 và python3.
JenyaKh 14/07/19

phiên bản kẹp cũng phải hoạt động trong Phyton 2 - kẹp là một tùy chọn và do đó được phép.
Alexander Stohr

4

Tôi sử dụng Portable winpython trong Windows, nó bao gồm bảng điều khiển IPython QT, tôi có thể đạt được những điều sau.

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

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

>>>str = "結婚"


>>>print (str)
結婚

trình thông dịch bảng điều khiển của bạn phải hỗ trợ unicode để hiển thị các ký tự unicode.


3

Chỉ còn một điều nữa chưa được thêm vào

Trong Python 2, nếu bạn muốn in một biến có unicode và sử dụng .format(), thì hãy thực hiện việc này (đặt chuỗi cơ sở đang được định dạng thành chuỗi unicode với u'':

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

3

Điều này sửa lỗi in UTF-8 trong python:

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

1

Thay thế '+' bằng '000' . Ví dụ: 'U + 1F600' sẽ trở thành 'U0001F600' và thêm mã Unicode với "\" và in. Thí dụ:

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

Kiểm tra điều này có thể nó sẽ giúp biểu tượng cảm xúc unicode python

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.