Como posso encontrar o nome comum para um glifo específico?

21

Às vezes, gostaria de saber o nome de um glifo. Por exemplo, se eu vir , talvez queira saber se é um hífen -, um traço , um traço ou um símbolo de menos . Existe uma maneira de copiar e colar isso em um terminal para ver o que é?

Não tenho certeza se meu sistema conhece os nomes comuns desses glifos, mas certamente existem algumas informações (parciais) disponíveis, como em /usr/share/X11/locale/en_US.UTF-8/Compose. Por exemplo,

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

Outro exemplo glifo: 🐄.

Sparhawk
fonte

Respostas:

30

Experimente o utilitário unicode :

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

Ou o uconvutilitário do pacote ICU :

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

Você também pode obter informações através do recodeutilitário:

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

203D         point exclarrogatif

Ou com Perl:

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

Observe que eles fornecem informações sobre os caracteres que compõem esse glifo, não sobre o glifo como um todo. Por exemplo, para (e com combinação de sotaque agudo):

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

Diferente do caractere autônomo é:

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

Você pode pedir uconvpara recombinar aqueles (para aqueles que têm um formulário combinado):

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

(é uma forma combinada, mas não b).

Stéphane Chazelas
fonte
O que é unicode? Parece que não o tenho instalado (e não consigo encontrá-lo nos repositórios do Arch Linux). Além disso, o que diabos é exclarrogatif? [EDIT: Eu entendo isso, também aqui, embora o meu sistema não é francês.]
Sparhawk
2
@ Sparhawk, contração de exclamatife interrogatif. recodefoi escrito por um cara franco-canadense no início dos anos 80.
Stéphane Chazelas
2
@Sparhawk kassiopeia.juls.savba.sk/~garabik/software/unicode - disponível como unicodepacote no Debian, nenhuma idéia sobre empacotamento no Arch.
Gilles 'SO- stop being evil'
1
@ PaŭloEbermann Por que printf é melhor que eco? . Agora que você perguntou, é esperado que você leia toda a resposta. Haverá um teste.
terdon
1
@Sparhawk %sé como um espaço reservado, chamado especificador de formato (ou especificador de conversão). printf irá substituí-lo pelos argumentos seguintes, tratando-o como uma string (em oposição a um número, por exemplo) (geralmente como você esperaria com a printf()função de C ). Veja os documentos ( pubs.opengroup.org/onlinepubs/9699919799//basedefs/… ).
Muru
5

A melhor maneira que eu sei é através do Perl uniprops. Ele vem com o Unicode::Tusslemódulo do Perl . Você pode instalá-lo com

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

Você pode executá-lo em qualquer glifo que deseja testar:

$ 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
terdon
fonte
unipropstambém usa charnames :: viacode internamente.
precisa saber é o seguinte
@cuonglm sim, mas o módulo Tussle inclui todos os tipos de ferramentas sofisticadas e unipropsé muito, muito mais fácil de digitar do que chamar explicitamente o módulo. Ele também fornece mais informações do que apenas o nome.
terdon
5

Você pode usar a função viacode Perl no módulo charnames :

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

charnames foi lançado pela primeira vez com o perl v5.6.0


Com o Perl 6 , a produção estará pronta neste dia de Natal, vale a pena mencionar aqui, pois quando ele tem o melhor suporte para caracteres Unicode que eu já vi. Você só precisa chamar método / rotina não nomeado :

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

(e combinando sotaque agudo) e écaráter autônomo :

# 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é a abreviação de $_.uniname)

cuonglm
fonte
4

Você pode usar unicode, o que também gera mais informações além do nome:

# unicode –
U+2013 EN DASH
UTF-8: e2 80 93  UTF-16BE: 2013  Decimal: &#8211;
–
Category: Pd (Punctuation, Dash)
Bidi: ON (Other Neutrals)
Marco
fonte
O que é unicode? Parece que não o tenho instalado (e não consigo encontrá-lo nos repositórios do Arch Linux).
Sparhawk
3
@ Sparhawk no meu Debian, é apenas um script Python instalado pelo unicodepacote. Você deve conseguir baixá-lo do repositório Debian .
terdon
1

Crie um script bash com isso:

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

Nomeie-o como desejar, por exemplo, namechare conceda permissões de execução.

Agora, você pode ligar por exemplo:

./namechar @

e o resultado será:

COMMERCIAL AT
jcbermu
fonte
Isso é bom, mas corresponde apenas a um grupo de caracteres, não ao unicode completo. Por exemplo, ele falha 🐄e produz resultados repetidos para . O último pode ser corrigido através da tubulação | sort -u.
terdon
Sim, @terdon está correto. (Foi por isso que disse "parcial" na pergunta.) Este arquivo contém apenas glifos mapeados para a Composechave.
Sparhawk