วิธีการพิมพ์ Unicode glyph ชื่อสำหรับสายป้อน?


12

ฉันต้องการที่จะสามารถทำงานได้

unicode-names 'abç'

และดูชื่ออักขระ Unicode ที่เกี่ยวข้อง:

LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C WITH CEDILLA

การพิมพ์สตริงเป็นชุดของชื่อสัญลักษณ์ Unicode จะเป็นประโยชน์ในหลายกรณี:

  • แยกแยะอักขระที่สับสนได้ง่ายเช่น "i" และ "í"
  • อธิบายว่าสตริงตัวอักษรประกอบด้วยอะไรจริง (ตัวอย่างเช่นอักขระที่ไม่สามารถพิมพ์หรือไม่ได้กำหนดอักขระความกว้างเป็นศูนย์)

คำตอบ:


14

uniutilsuninameแพคเกจมีโปรแกรม

$ echo -n …—|uniname
character  byte       UTF-32   encoded as     glyph   name
    0          0  002026   E2 80 A6       …      HORIZONTAL ELLIPSIS
    1          3  002014   E2 80 94       —      EM DASH

1
สำหรับผลลัพธ์ที่น้อยที่สุดที่มีเพียงชื่อให้ใช้ตัวเลือกเหล่านี้:echo -n …— | uniname -bcegpu
l0b0

8

ฉันไม่รู้วิธีที่ดีในการตรวจสอบสิ่งนี้bashแต่ Python มีฐานข้อมูล Unicode ในตัวซึ่งคุณสามารถใช้งานได้เหมือนในสคริปต์เช่นนี้

#!/usr/bin/env python
import sys, unicodedata
for ch in sys.stdin.read().decode('utf-8'):
  try:
    print unicodedata.name(ch)
  except ValueError:
    print 'codepoint ', ord(ch)

คุณสามารถใช้สคริปต์นี้เช่นนี้ (สมมติว่าคุณเรียกมันว่าunicode-names):

$ echo 'abc©áοπρσ' | unicode-names
LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C
COPYRIGHT SIGN
LATIN SMALL LETTER A WITH ACUTE
GREEK SMALL LETTER OMICRON
GREEK SMALL LETTER PI
GREEK SMALL LETTER RHO
GREEK SMALL LETTER SIGMA
codepoint 10

ฐานข้อมูลมีValueErrorข้อยกเว้นสำหรับตัวละครใด ๆ ที่ไม่ทราบดังนั้นเราจึงพิมพ์ codepoints ของพวกเขาเป็นทศนิยม

Caveat: สคริปต์ถือว่าเทอร์มินัลของคุณคือแบบเข้ารหัส UTF-8 หากไม่เป็นเช่นนั้นคุณควรเปลี่ยนอาร์กิวเมนต์ของdecode()วิธีการ Python สนับสนุนการเข้ารหัสที่มีให้เลือกมากมายคุณจะอยู่ในนั้นแน่นอน


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