Jak znaleźć wspólną nazwę dla konkretnego glifu?


21

Czasami chciałbym poznać nazwę glifu. Na przykład, jeśli widzę , może chcę wiedzieć, czy jest to łącznik -, en-myślnik , EM-kreska , albo symbolem minus . Czy istnieje sposób, aby skopiować i wkleić to do terminala, aby zobaczyć, co to jest?

Nie jestem pewien, czy mój system zna nazwy zwyczajowe tych glifów, ale z pewnością dostępne są niektóre (częściowe) informacje, takie jak w /usr/share/X11/locale/en_US.UTF-8/Compose. Na przykład,

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

Innym przykładem glif: 🐄.

Odpowiedzi:


30

Wypróbuj narzędzie Unicode :

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

Lub uconvnarzędzie z pakietu ICU :

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

Możesz również uzyskać informacje za pośrednictwem recodenarzędzia:

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

203D         point exclarrogatif

Lub z Perlem:

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

Pamiętaj, że zawierają one informacje o postaciach tworzących ten glif, a nie o całym glifie. Na przykład dla (ez połączeniem ostrego akcentu):

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

Różni się od samodzielnej postaci é:

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

Możesz poprosić uconvo ponowne połączenie tych (dla tych, które mają połączoną formę):

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

(é ma połączoną formę, ale nie b).


Co to jest unicode? Wydaje mi się, że nie mam tego zainstalowanego (i nie mogę go znaleźć w repozytoriach Arch Linux). A co to, u licha, jest exclarrogatif? [EDYCJA: Rozumiem to tutaj, chociaż mój system nie jest francuski.]
Sparhawk

2
@Sparhawk, skurcz exclamatifi interrogatif. recodezostał napisany przez Francuza z Kanady na początku lat 80.
Stéphane Chazelas

2
@Sparhawk kassiopeia.juls.savba.sk/~garabik/software/unicode - dostępny jako unicodepakiet w Debianie, nie ma pojęcia o pakowaniu w Arch.
Gilles „SO- przestań być zły”

1
@ PaŭloEbermann Dlaczego printf jest lepszy niż echo? . Teraz, gdy zapytałeś, musisz przeczytać całą odpowiedź. Będzie test.
terdon

1
@Sparhawk %sjest jak symbol zastępczy, nazywany specyfikatorem formatu (lub specyfikatorem konwersji). printf zastąpi go kolejnymi argumentami, traktując go jako ciąg znaków (na przykład w przeciwieństwie do liczby) (ogólnie tak, jak można oczekiwać po printf()funkcji C ). Zobacz dokumenty ( pubs.opengroup.org/onlinepubs/9699919799//basedefs/… ).
mur

5

Najlepszym sposobem, jaki znam, jest poprzez Perla uniprops. Pochodzi z Unicode::Tusslemodułem Perla . Możesz go zainstalować za pomocą

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

Następnie możesz uruchomić go na dowolnym glifie, który chcesz przetestować:

$ 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

unipropsużywa także charnames :: viacode wewnętrznie.
cuonglm

@cuonglm tak, ale moduł Tussle zawiera różnego rodzaju fantazyjne narzędzia i unipropsjest o wiele łatwiejszy do napisania niż bezpośrednie wywoływanie modułu. Zapewnia także więcej informacji niż tylko nazwę.
terdon

5

Możesz użyć funkcji Viacode Perla z modułu charnames :

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

charnames zostało wydane po raz pierwszy z perlem v5.6.0


Z Perl 6 będzie gotowy na produkcję tego Boże Narodzenie, to warto o tym wspomnieć tutaj, od kiedy ma najlepsze wsparcie dla znaków Unicode, jakie kiedykolwiek widziałem. Musisz tylko wywołać metodę / procedurę uniname :

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

(e z połączeniem ostrego akcentu) i samodzielny écharakter zapewniają:

# 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

( .uninamejest skrótem od $_.uniname)


4

Możesz użyć unicode, który wyświetla również więcej informacji niż tylko nazwę:

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

Co to jest unicode? Wydaje mi się, że nie mam tego zainstalowanego (i nie mogę go znaleźć w repozytoriach Arch Linux).
Sparhawk

3
@Sparhawk na moim Debianie, to tylko skrypt Pythona zainstalowany przez unicodepakiet. Powinieneś być w stanie go pobrać, pobierając pakiet źródłowy z repozytoriów Debiana .
terdon

1

Utwórz skrypt bash za pomocą tego:

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

Nadaj mu dowolną nazwę namechari nadaj mu uprawnienia do wykonywania.

Teraz możesz zadzwonić na przykład:

./namechar @

a wynikiem będzie:

COMMERCIAL AT

Jest to dobre, ale pasuje tylko do zestawu znaków, a nie do pełnego Unicode. Na przykład nie działa 🐄i generuje powtarzające się wyniki dla . Ostatni można naprawić, przepuszczając rurkę | sort -u.
terdon

Tak, @terdon ma rację. (Dlatego w pytaniu powiedziałem „częściowy”). Ten plik zawiera tylko glify mapowane na Composeklucz.
Sparhawk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.