Comment imprimer les noms de glyphes Unicode pour la string d'input?

J'aimerais pouvoir courir

unicode-names 'abç' 

et voyez les noms de caractères Unicode correspondants:

 LATIN SMALL LETTER A LATIN SMALL LETTER B LATIN SMALL LETTER C WITH CEDILLA 

L'printing d'une string sous la forme d'une série de noms de glyphes Unicode serait utile dans plusieurs cas:

  • Distinguer les caractères facilement confus tels que "je" et "í".
  • Expliquez ce qu'une string littérale contient réellement (par exemple des caractères non imprimables ou non assignés, de largeur nulle).

Le package uniutils a le programme uniname .

 $ echo -n …—|uniname character byte UTF-32 encoded as glyph name 0 0 002026 E2 80 A6 … HORIZONTAL ELLIPSIS 1 3 002014 E2 80 94 — EM DASH 

Je ne connais pas un bon moyen de vérifier cela à partir de bash , mais Python a une database Unicode embeddede que vous pouvez utiliser comme dans un script comme celui-ci:

 #!/usr/bin/env python import sys, unicodedata for ch in sys.stdin.read().decode('utf-8'): try: print unicodedata.name(ch) except ValueError: print 'codepoint ', ord(ch) 

Vous pouvez utiliser ce script comme ceci (en supposant que vous l' unicode-names ):

 $ echo 'abc©áοπρσ' | unicode-names LATIN SMALL LETTER A LATIN SMALL LETTER B LATIN SMALL LETTER C COPYRIGHT SIGN LATIN SMALL LETTER A WITH ACUTE GREEK SMALL LETTER OMICRON GREEK SMALL LETTER PI GREEK SMALL LETTER RHO GREEK SMALL LETTER SIGMA codepoint 10 

La database renvoie une exception ValueError pour tous les caractères ValueError . Nous imprimons donc leurs codes en décimal (ce sont des caractères non imprimables, en général).

Avertissement: le script suppose que votre terminal est codé en UTF-8. Si ce n'est pas le cas, vous devriez changer l'argument de la méthode decode() . Python supporte une très large sélection d'enencodings, la vôtre sera certainement là.