Comment puis-je trouver le nom commun d'un glyphe particulier?

21

Parfois, j'aimerais connaître le nom d'un glyphe. Par exemple, si je vois , je peux vouloir savoir s'il s'agit d'un trait d'union -, d'un tiret en , d'un tiret en em ou d'un symbole moins . Existe-t-il un moyen de copier-coller cela dans un terminal pour voir de quoi il s'agit?

Je ne sais pas si mon système connaît les noms communs à ces glyphes, mais il existe certainement des informations (partielles) disponibles, comme dans /usr/share/X11/locale/en_US.UTF-8/Compose. Par exemple,

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

Un autre glyphe exemple: 🐄.

Sparhawk
la source

Réponses:

30

Essayez l' utilitaire unicode :

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

Ou l' uconvutilitaire du package ICU :

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

Vous pouvez également obtenir des informations via l' recodeutilitaire:

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

203D         point exclarrogatif

Ou avec Perl:

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

Notez que ceux-ci donnent des informations sur les personnages qui composent ce glyphe, pas sur le glyphe dans son ensemble. Par exemple, pour (e avec la combinaison d'un accent aigu):

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

Différent du caractère autonome é:

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

Vous pouvez demander uconvà recombiner ceux (pour ceux qui ont une forme combinée):

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

(é a une forme combinée, mais pas b́).

Stéphane Chazelas
la source
Qu'est-ce que c'est unicode? Je ne semble pas l'avoir installé (et je ne le trouve pas dans les dépôts Arch Linux). Et qu'est-ce que c'est que ça exclarrogatif? [EDIT: Je l'obtiens ici aussi, bien que mon système ne soit pas français.]
Sparhawk
2
@Sparhawk, contraction de exclamatifet interrogatif. recodea été écrit par un Canadien français au début des années 80.
Stéphane Chazelas
2
@Sparhawk kassiopeia.juls.savba.sk/~garabik/software/unicode - disponible en tant que unicodepaquet sur Debian, aucune idée de l'empaquetage sur Arch.
Gilles 'SO- arrête d'être méchant'
1
@ PaŭloEbermann Pourquoi printf est-il meilleur que l'écho? . Maintenant que vous avez demandé, vous êtes censé lire la réponse entière. Il y aura un test.
terdon
1
@Sparhawk %sest comme un espace réservé, appelé spécificateur de format (ou spécificateur de conversion). printf le remplacera par les arguments suivants, le traitant comme une chaîne (par opposition à un nombre, par exemple) (généralement comment vous vous attendriez avec la printf()fonction de C ). Voir la documentation ( pubs.opengroup.org/onlinepubs/9699919799//basedefs/… ).
muru
5

La meilleure façon que je connaisse est via Perl's uniprops. Il est livré avec le Unicode::Tusslemodule de Perl . Vous pouvez l'installer avec

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

Vous pouvez ensuite l'exécuter sur n'importe quel glyphe que vous souhaitez tester:

$ 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
la source
unipropsutilise également charnames :: viacode en interne.
cuonglm
@cuonglm oui, mais le module Tussle comprend toutes sortes d'outils sophistiqués et unipropsest de loin, beaucoup plus facile à taper que d'appeler explicitement le module. Il fournit également plus d'informations que le nom.
terdon
5

Vous pouvez utiliser la fonction Perl viacode du module charnames :

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

charnames a été publié pour la première fois avec perl v5.6.0


Avec Perl 6 , la production sera prête ce jour de Noël, il convient de le mentionner ici, car il a le meilleur support pour les personnages Unicode que j'ai jamais vu. Il vous suffit d'appeler la méthode / routine uniname :

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

(e en combinant un accent aigu) et un écaractère autonome vous offrent tous deux:

# 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

( .uninameest l'abréviation de $_.uniname)

cuonglm
la source
4

Vous pouvez utiliser unicode, qui génère également plus d'informations que le nom:

# unicode –
U+2013 EN DASH
UTF-8: e2 80 93  UTF-16BE: 2013  Decimal: &#8211;
–
Category: Pd (Punctuation, Dash)
Bidi: ON (Other Neutrals)
Marco
la source
Qu'est-ce que c'est unicode? Je ne semble pas l'avoir installé (et je ne le trouve pas dans les dépôts Arch Linux).
Sparhawk
3
@Sparhawk sur mon Debian, c'est juste un script Python installé par le unicodepaquet. Vous devriez pouvoir l'obtenir en téléchargeant le paquet source depuis les dépôts Debian .
terdon
1

Créez un script bash avec ceci:

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

Nommez-le comme vous le souhaitez, par exemple, namecharet donnez-lui des autorisations d'exécution.

Maintenant, vous pouvez appeler par exemple:

./namechar @

et le résultat sera:

COMMERCIAL AT
jcbermu
la source
C'est bien, mais ne correspond qu'à un sous-ensemble de caractères, pas à unicode complet. Par exemple, il échoue 🐄et produit des résultats répétés pour . Le dernier pourrait être réparé par des tuyaux | sort -u.
terdon
Oui, @terdon est correct. (C'est pourquoi j'ai dit "partiel" dans la question.) Ce fichier ne contient que des glyphes mappés à la Composeclé.
Sparhawk