จะพิมพ์อักขระ Unicode ใน Python ได้อย่างไร?


115

ฉันต้องการทำพจนานุกรมที่คำภาษาอังกฤษชี้ไปที่คำแปลภาษารัสเซียและภาษาฝรั่งเศส

ฉันจะพิมพ์อักขระ Unicode ใน Python ได้อย่างไร นอกจากนี้คุณเก็บอักขระ Unicode ไว้ในตัวแปรได้อย่างไร?


สิ่งนี้ช่วยได้ไหม
paulsm4

ได้ดูที่นี่ การนำหน้าสตริงของคุณด้วยuอนุญาตให้ python พิจารณาว่าสตริงเหล่านั้นเป็นตัวอักษรสตริงเดียว
SRI

คำตอบ:


109

ในการรวมอักขระ Unicode ในซอร์สโค้ด Python ของคุณคุณสามารถใช้อักขระ Escape Unicodeในรูปแบบ\u0123ในสตริงของคุณและนำหน้าสตริงลิเทอรัลด้วย 'u'

นี่คือตัวอย่างที่ทำงานในคอนโซลแบบโต้ตอบ Python:

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

Strings ประกาศเช่นนี้เป็นตัวแปร Unicode ชนิดที่อธิบายไว้ในเอกสารหลาม Unicode

หากการเรียกใช้คำสั่งด้านบนแสดงข้อความไม่ถูกต้องสำหรับคุณบางทีเทอร์มินัลของคุณอาจไม่สามารถแสดงอักขระ Unicode ได้

สำหรับข้อมูลเกี่ยวกับการอ่านข้อมูล Unicode จากไฟล์โปรดดูคำตอบนี้:

การอ่านอักขระจากไฟล์ใน Python


4
ใช่คุณสามารถเขียนโค้ดของคุณในไฟล์ข้อความที่เข้ารหัส Unicode ได้ แต่เครื่องมือแก้ไขและเครื่องมือจำนวนมากมีปัญหาในการจัดการกับสิ่งเหล่านี้ ประสบการณ์ของฉันในการทำงานกับซอร์สโค้ดบนแพลตฟอร์มที่แตกต่างกันจำนวนมากคือควรเก็บซอร์สโค้ดไว้ใน ASCII และใช้ Unicode Escape
Matt Ryall

3
@MattRyall ฉันเห็นด้วย แต่ทีมนักพัฒนาชาวรัสเซียอาจต้องการเขียนความคิดเห็นและเอกสารเป็นภาษารัสเซีย สำหรับโครงการภาษาเป็นตัวเลือกที่ดี
Johan Lundberg

3
แม้ว่าจะใช้งานได้ก็ต่อเมื่อคุณพิมพ์เฉพาะสตริง หากถูกห่อด้วยวัตถุอื่นคุณจะเห็นรหัสหลบหนี ลอง "พิมพ์ [u '\ u0420 \ u043e \ u0441 \ u0441 \ u0438 \ u044f']"
btubbs

3
ถ้าฉันเก็บไว้เป็นสตริงmystr? แล้วจะพิมพ์ยังไง?
cqcn1991

1
@CarloWood คำตอบด้านบน บอกสิ่งที่คุณต้องการ เพียงprint your_unicode_characters.encode('utf-8')
Yuhao Zhang

48

พิมพ์อักขระ Unicode ใน Python:

พิมพ์อักขระ Unicode โดยตรงจากตัวแปล python:

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

อักขระ Unicode u'\u2713'คือเครื่องหมายถูก ล่ามจะพิมพ์เครื่องหมายถูกบนหน้าจอ

พิมพ์อักขระ Unicode จากสคริปต์ python:

ใส่สิ่งนี้ใน test.py:

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

เรียกใช้ดังนี้:

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

หากไม่แสดงเครื่องหมายถูกสำหรับคุณแสดงว่าปัญหาอาจอยู่ที่อื่นเช่นการตั้งค่าเทอร์มินัลหรือสิ่งที่คุณกำลังทำกับการเปลี่ยนเส้นทางสตรีม

จัดเก็บอักขระ Unicode ในไฟล์:

บันทึกลงในไฟล์: 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: é')

เรียกใช้และไพพ์เอาต์พุตไปยังไฟล์:

python foo.py > tmp.txt

เปิด tmp.txt แล้วมองเข้าไปข้างในคุณจะเห็นสิ่งนี้:

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

ดังนั้นคุณจึงบันทึก Unicode e ที่มีเครื่องหมายทำให้สับสนลงในไฟล์


@ ofer.sheffer แปลกมากฉันมาที่นี่เพื่อแก้ปัญหาตรงข้ามประเด็นที่อาจต้องใช้เวลาเล่นซอ
Chris H

40

หากคุณกำลังพยายามใช้print()Unicode และได้รับข้อผิดพลาดของตัวแปลงสัญญาณ asciiโปรดดูหน้านี้ซึ่ง TLDR จะทำexport PYTHONIOENCODING=UTF-8ก่อนที่จะเริ่ม python (ตัวแปรนี้จะควบคุมลำดับไบต์ที่คอนโซลพยายามเข้ารหัสข้อมูลสตริงของคุณเป็น) ภายใน Python3 ใช้ UTF-8 ตามค่าเริ่มต้น (ดูUnicode HOWTO) นั่นไม่ใช่ปัญหา คุณสามารถใส่ Unicode ในสตริงดังที่เห็นในคำตอบและความคิดเห็นอื่น ๆ เมื่อคุณพยายามและนำข้อมูลนี้ออกไปยังคอนโซลของคุณว่าปัญหาเกิดขึ้น Python คิดว่าคอนโซลของคุณรองรับ ascii ได้เท่านั้น คำตอบอื่น ๆ บางคำกล่าวว่า "เขียนลงในไฟล์ก่อน" แต่โปรดทราบว่าพวกเขาระบุการเข้ารหัส (UTF-8) สำหรับการทำเช่นนั้น (ดังนั้น Python จะไม่เปลี่ยนแปลงอะไรในการเขียน) จากนั้นใช้วิธีการอ่าน ไฟล์ที่พ่นไบต์ออกมาโดยไม่คำนึงถึงการเข้ารหัสซึ่งเป็นสาเหตุที่ใช้งานได้


ขอบคุณ! ฉันมีปัญหาเกี่ยวกับ unicde เมื่อใช้แพ็กเกจ asciitree เพื่อเขียนผลลัพธ์ไปยังไฟล์ สิ่งนี้แก้ไขได้สำหรับฉัน
PålThingbø

ขอบคุณมาก. ใช้เวลาหลายชั่วโมงในการ Googling ดีใจที่พบสิ่งนี้
CharlyDelta

17

ใน Python 2 คุณประกาศสตริง Unicode ด้วย a uเช่นเดียวกับการu"猫"ใช้decode()และencode()การแปลเป็นและจาก Unicode ตามลำดับ

มันค่อนข้างจะง่ายขึ้นเล็กน้อยในหลาม 3. ภาพรวมดีมากสามารถพบได้ที่นี่ การนำเสนอนั้นให้ความกระจ่างหลายสิ่งสำหรับฉัน


1
ขอบคุณสำหรับลิงค์วิดีโอ มันมีประโยชน์มาก
อรุณ

1
สิ่งนี้มีให้ในรูปแบบที่ไม่ใช่วิดีโอที่นี่: Pragmatic Unicode หรือฉันจะหยุดความเจ็บปวดได้อย่างไร (Pycon2012) nedbatchelder.com/text/unipain.html
Tom Hundt

7

เมื่อพิจารณาว่านี่เป็นผลลัพธ์สแต็กโอเวอร์ครั้งแรกเมื่อ Google ค้นหาหัวข้อนี้มันมีการกล่าวถึงว่าuการขึ้นต้นสตริง Unicode เป็นทางเลือกใน Python 3 (ตัวอย่าง Python 2 ถูกคัดลอกจากคำตอบด้านบน)

Python 3 (ทั้งสองทำงาน):

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'

ขอบคุณ! สิ่งที่ฉันค้นหา: วิธีสากลในการพิมพ์อักขระ Unicode ภายในสตริงทั้งสำหรับ python2 และ python3
JenyaKh

รุ่นที่ยึดควรใช้งานได้ใน Phyton 2 เช่นกัน - ที่หนีบเป็นตัวเลือกและได้รับอนุญาต
Alexander Stohr

4

ฉันใช้ Portable winpython ใน Windows ซึ่งมีคอนโซล IPython QT ฉันสามารถทำสิ่งต่อไปนี้ได้

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

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

>>>str = "結婚"


>>>print (str)
結婚

ล่ามคอนโซลของคุณควรรองรับ Unicode เพื่อแสดงอักขระ Unicode


3

อีกหนึ่งสิ่งที่ยังไม่ได้เพิ่ม

ใน Python 2 หากคุณต้องการพิมพ์ตัวแปรที่มี Unicode และใช้งาน.format()ให้ทำสิ่งนี้ (สร้างสตริงฐานที่กำลังจัดรูปแบบสตริง Unicode ด้วยu'':

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

3

สิ่งนี้แก้ไขการพิมพ์ UTF-8 ใน python:

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

1

แทนที่'+'กับ'000' ตัวอย่างเช่น"U + 1F600"จะกลายเป็น"U0001F600"และนำหน้ารหัส Unicode ด้วย"\"แล้วพิมพ์ ตัวอย่าง:

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

ตรวจสอบสิ่งนี้อาจจะช่วย python unicode emoji

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.