ฉันจะค้นหาชื่อสามัญสำหรับสัญลักษณ์เฉพาะได้อย่างไร


21

บางครั้งฉันต้องการทราบชื่อของสัญลักษณ์ ตัวอย่างเช่นถ้าผมเห็นผมอาจต้องการที่จะทราบว่ามันยัติภังค์-, ห้องน้ำในประเป็น em ประหรือสัญลักษณ์ลบ มีวิธีที่ฉันสามารถคัดลอกวางลงในเทอร์มินัลเพื่อดูว่ามันคืออะไร?

ผมไม่แน่ใจว่าระบบของฉันรู้ชื่อสามัญที่จะร่ายมนตร์เหล่านี้ แต่มีบางอย่างแน่นอน (บางส่วน) /usr/share/X11/locale/en_US.UTF-8/Composeข้อมูลที่มีอยู่เช่นใน ตัวอย่างเช่น,

<Multi_key> <exclam> <question>         : "‽"   U203D # INTERROBANG

🐄สัญลักษณ์อีกตัวอย่างหนึ่ง:

คำตอบ:


30

ลองใช้ยูทิลิตี้Unicode :

$ unicode ‽
U+203D INTERROBANG
UTF-8: e2 80 bd  UTF-16BE: 203d  Decimal: &#8253;
‽
Category: Po (Punctuation, Other)
Bidi: ON (Other Neutrals)

หรือuconvโปรแกรมอรรถประโยชน์จากแพ็คเกจICU :

$ printf %s ‽ | uconv -x any-name
\N{INTERROBANG}

นอกจากนี้คุณยังสามารถรับข้อมูลผ่านทางrecodeยูทิลิตี้:

$ printf %s ‽ | recode ..dump
UCS2   Mne   Description

203D         point exclarrogatif

หรือด้วย Perl:

$ printf %s ‽ | perl -CLS -Mcharnames=:full -lne 'print charnames::viacode(ord) for /./g'
INTERROBANG

โปรดทราบว่าผู้ที่ให้ข้อมูลเกี่ยวกับตัวละครที่ทำขึ้นสัญลักษณ์นั้นไม่ได้อยู่ที่สัญลักษณ์ทั้งหมด ตัวอย่างเช่นสำหรับ(e ด้วยการรวมสำเนียงเฉียบพลัน):

$ printf é | uconv -x any-name
\N{LATIN SMALL LETTER E}\N{COMBINING ACUTE ACCENT}

แตกต่างจากตัวละครéสแตนด์อโลน:

$ printf é | uconv -x any-name
\N{LATIN SMALL LETTER E WITH ACUTE}

คุณสามารถขอuconvรวมตัวกันอีกครั้ง (สำหรับผู้ที่มีรูปแบบผสม):

$ printf 'e\u0301b\u0301' | uconv -x '::nfc;::name;'
\N{LATIN SMALL LETTER E WITH ACUTE}\N{LATIN SMALL LETTER B}\N{COMBINING ACUTE ACCENT}

(éมีรูปแบบรวมกัน แต่ไม่รวม b́)


คือunicodeอะไร ฉันดูเหมือนจะไม่ได้ติดตั้ง (และไม่สามารถหาได้ใน Arch Linux repos) นอกจากนี้บนโลกคือexclarrogatifอะไร? [แก้ไข: ฉันได้รับที่นี่ด้วยแม้ว่าระบบของฉันจะไม่ใช่ภาษาฝรั่งเศส]
Sparhawk

2
@Sparhawk, การหดตัวของและexclamatif ถูกเขียนโดยคนฝรั่งเศส - แคนาดาในช่วงต้นยุค 80 interrogatifrecode
Stéphane Chazelas

2
@Sparhawk kassiopeia.juls.savba.sk/~garabik/software/unicode - มีให้ใช้งานเป็นunicodeแพ็คเกจบน Debian ไม่มีความคิดเกี่ยวกับบรรจุภัณฑ์บน Arch
Gilles 'หยุดความชั่วร้าย'

1
@ PaŭloEbermann ทำไม printf ถึงดีกว่า echo . ตอนนี้คุณถามคุณคาดว่าจะอ่านคำตอบทั้งหมด จะมีการทดสอบ
terdon

1
@Sparhawk %sเป็นเหมือนตัวยึดตำแหน่งที่เรียกว่าตัวระบุรูปแบบ (หรือตัวระบุการแปลง) printf จะแทนที่ด้วยอาร์กิวเมนต์ที่ประสบความสำเร็จโดยถือว่าเป็นสตริง (ตรงข้ามกับตัวเลข) (โดยทั่วไปคือวิธีที่คุณคาดหวังกับprintf()ฟังก์ชันของ C ) ดูเอกสาร ( pubs.opengroup.org/onlinepubs/9699919799//basedefs/ … )
muru

5

วิธีที่ดีที่สุดที่ฉันรู้คือผ่านของ unipropsPerl มันมาพร้อมกับUnicode::Tussleโมดูลของ Perl คุณสามารถติดตั้งได้ด้วย

sudo perl -MCPAN -e 'install Unicode::Tussle'

จากนั้นคุณสามารถเรียกใช้บนสัญลักษณ์ใด ๆ ที่คุณต้องการทดสอบ:

$ uniprops  ‽
U+203D ‹‽› \N{INTERROBANG}
    \pP \p{Po}
    All Any Assigned InPunctuation Punct Is_Punctuation Common Zyyy Po P
       General_Punctuation Gr_Base Grapheme_Base Graph GrBase Other_Punctuation
       Pat_Syn Pattern_Syntax PatSyn Print Punctuation STerm Term
       Terminal_Punctuation Unicode X_POSIX_Graph X_POSIX_Print X_POSIX_Punct

$ uniprops  🐄
U+1F404 ‹🐄› \N{COW}
    \pS \p{So}
    All Any Assigned InMiscPictographs Common Zyyy So S Gr_Base Grapheme_Base Graph
       GrBase Misc_Pictographs Miscellaneous_Symbols_And_Pictographs Other_Symbol
       Print Symbol Unicode X_POSIX_Graph X_POSIX_Print

unipropsยังใช้ charnames :: รหัสผ่านภายใน
cuonglm

@cuonglm ใช่ แต่โมดูล Tussle รวมถึงเครื่องมือแฟนซีทุกประเภทและunipropsอยู่ไกลพิมพ์ได้ง่ายกว่าเรียกโมดูลอย่างชัดเจน นอกจากนี้ยังให้ข้อมูลมากกว่าชื่อ
terdon

5

คุณสามารถใช้ฟังก์ชัน Perl viacode จากโมดูลcharnames :

$ printf ‽ | perl -Mcharnames=:full -CLS -nle 'print charnames::viacode(ord)'
INTERROBANG
$ printf 🐄 | perl -Mcharnames=:full -CLS -nle 'print charnames::viacode(ord)'
COW

charnamesเปิดตัวครั้งแรกกับ perl v5.6.0


ด้วยPerl 6จะพร้อมสำหรับการผลิตในวันคริสต์มาสนี้มันคุ้มค่าที่จะพูดถึงที่นี่เพราะเมื่อมันได้รับการสนับสนุนที่ดีที่สุดสำหรับตัวละคร Unicode ที่ฉันเคยเห็น คุณจะต้องเรียกเมธอด / รูทีนแบบuniname เท่านั้น :

$ printf ‽ | perl6 -ne 'say .uniname'
INTERROBANG

(e รวมการเน้นเสียงแบบเฉียบพลัน) และéอักขระแบบสแตนด์อโลนทำให้คุณ:

# e with combining acute accent
$ printf é | perl6 -ne 'say .uniname'
LATIN SMALL LETTER E WITH ACUTE

# standalone é
$ printf é | perl6 -ne 'say .uniname'
LATIN SMALL LETTER E WITH ACUTE

( .uninameเป็นชวเลขสำหรับ$_.uniname)


4

คุณสามารถใช้unicodeซึ่งยังแสดงผลข้อมูลมากกว่าเพียงแค่ชื่อ:

# unicode –
U+2013 EN DASH
UTF-8: e2 80 93  UTF-16BE: 2013  Decimal: &#8211;
–
Category: Pd (Punctuation, Dash)
Bidi: ON (Other Neutrals)

คือunicodeอะไร ฉันดูเหมือนจะไม่ได้ติดตั้ง (และไม่สามารถหาได้ใน Arch Linux repos)
Sparhawk

3
@Sparhawk บน Debian ของฉันเป็นเพียงสคริปต์ Python ที่ติดตั้งโดยunicodeแพ็คเกจ คุณควรจะสามารถที่จะได้รับมันได้โดยการดาวน์โหลดแพคเกจที่มาจากRepos Debian
terdon

1

สร้าง bash script ด้วยสิ่งนี้:

#!/bin/bash
awk -F ":" '{print $2}' /usr/share/X11/locale/en_US.UTF-8/Compose | grep "$1" | awk -F "#" '{print $2}'

ยกตัวอย่างเช่นตั้งชื่อตามที่คุณต้องการnamecharและให้สิทธิ์ดำเนินการ

ตอนนี้คุณสามารถโทรหาตัวอย่าง:

./namechar @

และผลลัพธ์จะเป็น:

COMMERCIAL AT

นี่เป็นสิ่งที่ดี แต่ตรงกับชุดอักขระเท่านั้นไม่ใช่แบบเต็ม Unicode ยกตัวอย่างเช่นมันล้มเหลวบนและก่อให้เกิดผลลัพธ์ซ้ำ🐄 สุดท้ายจะได้รับการแก้ไขโดยผ่านท่อ | sort -u
terdon

ใช่ @terdon ถูกต้อง (นั่นคือเหตุผลที่ฉันพูดว่า "บางส่วน" ในคำถาม) ไฟล์นี้มีเพียงร่ายมนตร์ที่แมปกับComposeคีย์
Sparhawk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.