ฉันต้องการทำพจนานุกรมที่คำภาษาอังกฤษชี้ไปที่คำแปลภาษารัสเซียและภาษาฝรั่งเศส
ฉันจะพิมพ์อักขระ Unicode ใน Python ได้อย่างไร นอกจากนี้คุณเก็บอักขระ Unicode ไว้ในตัวแปรได้อย่างไร?
u
อนุญาตให้ python พิจารณาว่าสตริงเหล่านั้นเป็นตัวอักษรสตริงเดียว
ฉันต้องการทำพจนานุกรมที่คำภาษาอังกฤษชี้ไปที่คำแปลภาษารัสเซียและภาษาฝรั่งเศส
ฉันจะพิมพ์อักขระ Unicode ใน Python ได้อย่างไร นอกจากนี้คุณเก็บอักขระ Unicode ไว้ในตัวแปรได้อย่างไร?
u
อนุญาตให้ python พิจารณาว่าสตริงเหล่านั้นเป็นตัวอักษรสตริงเดียว
คำตอบ:
ในการรวมอักขระ Unicode ในซอร์สโค้ด Python ของคุณคุณสามารถใช้อักขระ Escape Unicodeในรูปแบบ\u0123
ในสตริงของคุณและนำหน้าสตริงลิเทอรัลด้วย 'u'
นี่คือตัวอย่างที่ทำงานในคอนโซลแบบโต้ตอบ Python:
>>> print u'\u0420\u043e\u0441\u0441\u0438\u044f'
Россия
Strings ประกาศเช่นนี้เป็นตัวแปร Unicode ชนิดที่อธิบายไว้ในเอกสารหลาม Unicode
หากการเรียกใช้คำสั่งด้านบนแสดงข้อความไม่ถูกต้องสำหรับคุณบางทีเทอร์มินัลของคุณอาจไม่สามารถแสดงอักขระ Unicode ได้
สำหรับข้อมูลเกี่ยวกับการอ่านข้อมูล Unicode จากไฟล์โปรดดูคำตอบนี้:
mystr
? แล้วจะพิมพ์ยังไง?
print your_unicode_characters.encode('utf-8')
พิมพ์อักขระ 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 ที่มีเครื่องหมายทำให้สับสนลงในไฟล์
หากคุณกำลังพยายามใช้print()
Unicode และได้รับข้อผิดพลาดของตัวแปลงสัญญาณ asciiโปรดดูหน้านี้ซึ่ง TLDR จะทำexport PYTHONIOENCODING=UTF-8
ก่อนที่จะเริ่ม python (ตัวแปรนี้จะควบคุมลำดับไบต์ที่คอนโซลพยายามเข้ารหัสข้อมูลสตริงของคุณเป็น) ภายใน Python3 ใช้ UTF-8 ตามค่าเริ่มต้น (ดูUnicode HOWTO) นั่นไม่ใช่ปัญหา คุณสามารถใส่ Unicode ในสตริงดังที่เห็นในคำตอบและความคิดเห็นอื่น ๆ เมื่อคุณพยายามและนำข้อมูลนี้ออกไปยังคอนโซลของคุณว่าปัญหาเกิดขึ้น Python คิดว่าคอนโซลของคุณรองรับ ascii ได้เท่านั้น คำตอบอื่น ๆ บางคำกล่าวว่า "เขียนลงในไฟล์ก่อน" แต่โปรดทราบว่าพวกเขาระบุการเข้ารหัส (UTF-8) สำหรับการทำเช่นนั้น (ดังนั้น Python จะไม่เปลี่ยนแปลงอะไรในการเขียน) จากนั้นใช้วิธีการอ่าน ไฟล์ที่พ่นไบต์ออกมาโดยไม่คำนึงถึงการเข้ารหัสซึ่งเป็นสาเหตุที่ใช้งานได้
ใน Python 2 คุณประกาศสตริง Unicode ด้วย a u
เช่นเดียวกับการu"猫"
ใช้decode()
และencode()
การแปลเป็นและจาก Unicode ตามลำดับ
มันค่อนข้างจะง่ายขึ้นเล็กน้อยในหลาม 3. ภาพรวมดีมากสามารถพบได้ที่นี่ การนำเสนอนั้นให้ความกระจ่างหลายสิ่งสำหรับฉัน
เมื่อพิจารณาว่านี่เป็นผลลัพธ์สแต็กโอเวอร์ครั้งแรกเมื่อ 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'
ฉันใช้ Portable winpython ใน Windows ซึ่งมีคอนโซล IPython QT ฉันสามารถทำสิ่งต่อไปนี้ได้
>>>print ("結婚")
結婚
>>>print ("おはよう")
おはよう
>>>str = "結婚"
>>>print (str)
結婚
ล่ามคอนโซลของคุณควรรองรับ Unicode เพื่อแสดงอักขระ Unicode
อีกหนึ่งสิ่งที่ยังไม่ได้เพิ่ม
ใน 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
สิ่งนี้แก้ไขการพิมพ์ UTF-8 ใน python:
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
แทนที่'+'กับ'000' ตัวอย่างเช่น"U + 1F600"จะกลายเป็น"U0001F600"และนำหน้ารหัส Unicode ด้วย"\"แล้วพิมพ์ ตัวอย่าง:
>>> print("Learning : ", "\U0001F40D")
Learning : 🐍
>>>
ตรวจสอบสิ่งนี้อาจจะช่วย python unicode emoji