Як я можу знайти загальну назву для певного гліфа?


21

Іноді я хотів би дізнатися назву гліфа. Наприклад, якщо я бачу , я, можливо, захочу знати, чи це дефіс -, ен-тире , ем-тире чи символ мінус . Чи є спосіб я скопіювати та вставити це в термінал, щоб побачити, що це?

Я не впевнений, чи моя система знає загальні назви цих гліфів, але, безумовно, є якась (часткова) інформація, наприклад, у /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). Також що на землі exclarrogatif? [РЕДАКТУЙТЕ: Я також розумію це тут, хоча моя система не французька.]
Sparhawk

2
@Sparhawk, скорочення exclamatifі interrogatif. recodeбув написаний французько-канадським хлопцем на початку 80-х.
Стефан Шазелас

2
@Sparhawk kassiopeia.juls.savba.sk/~garabik/software/unicode - доступний як unicodeпакунок на Debian, не маючи уявлення про упаковку в Arch.
Жил "ТАК - перестань бути злим"

1
@ PaŭloEbermann Чому printf кращий за відлуння? . Тепер, коли ви запитували, очікується, що ви прочитаєте всю відповідь. Буде тест.
тердон

1
@Sparhawk %s- це як заповнювач, який називається специфікатором формату (або специфікатором перетворення). printf замінить його на наступні аргументи, трактуючи його як рядок (на відміну від числа, наприклад) (як правило, як ви очікували від printf()функції C ). Дивіться документи ( pubs.opengroup.org/onlinepubs/9699919799//basedefs/… ).
муру

5

Найкращий спосіб, який я знаю, - це через Перла uniprops. Він поставляється з 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також використовує внутрішні символи :: viacode.
cuonglm

@cuonglm так, але модуль Tussle включає всілякі вигадливі інструменти, і unipropsце набагато простіше набрати, ніж явно викликати модуль. Він також надає більше інформації, ніж лише ім'я.
terdon

5

Ви можете використовувати функцію через код коду Perl з модуля імен :

$ 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 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).
Sparhawk

3
@Sparhawk на моєму Debian, це просто сценарій Python, встановлений unicodeпакетом. Ви можете отримати це, завантаживши вихідний пакет із репостів Debian .
terdon

1

Створіть сценарій bash за допомогою цього:

#!/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

Це добре, але відповідає лише сукупності символів, а не повному унікоду. Наприклад, він не працює 🐄і дає повторні результати для . Останнє можна виправити, провівши через нього | sort -u.
terdon

Так, @terdon вірно. (Ось чому я сказав "часткове" у питанні.) Цей файл містить лише гліфи, відображені в Composeключ.
Sparhawk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.