Come stampare i nomi dei glifi Unicode per la stringa di input?


12

Mi piacerebbe poter correre

unicode-names 'abç'

e vedere i nomi dei caratteri Unicode corrispondenti:

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

La stampa di una stringa come una serie di nomi di glifi Unicode sarebbe utile in diversi casi:

  • Distingua caratteri facilmente confusi come "i" e "í".
  • Spiegare cosa contiene effettivamente una stringa letterale (ad esempio caratteri non stampabili o non assegnati, di larghezza zero).

Risposte:


14

Il pacchetto uniutils ha il programma 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

1
Per un output minimo con solo i nomi, utilizzare queste opzioni:echo -n …— | uniname -bcegpu
l0b0

8

Non conosco un buon modo per verificarlo bash, ma Python ha un database Unicode incorporato che puoi usare come in uno script come questo:

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

Puoi usare questo script in questo modo (supponendo che tu l'abbia chiamato 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

Il database genera ValueErrorun'eccezione per tutti i caratteri di cui non è a conoscenza, quindi stampiamo i loro punti di codice in decimale (questi sono caratteri non stampabili, di solito).

Avvertenza: lo script presuppone che il terminale sia codificato UTF-8. In caso contrario, è necessario modificare l'argomento del decode()metodo. Python supporta una vasta gamma di codifiche, la tua sarà sicuramente lì.


1
Meglio - usare sys.getdefaultencoding().
Chris Down,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.