Como imprimir nomes de glifos Unicode para string de entrada?

9

Gostaria de poder correr

unicode-names 'abç'

e veja os nomes dos caracteres Unicode correspondentes:

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

Imprimir uma string como uma série de nomes de glifo Unicode seria útil em vários casos:

  • Distinga caracteres facilmente confusos, como "i" e "í".
  • Explique o que uma string literal realmente contém (por exemplo, caracteres não imprimíveis ou não atribuídos, de largura zero).
por l0b0 15.03.2012 / 17:03

2 respostas

10

O pacote uniutils possui o programa 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
    
por 15.03.2012 / 21:15
7

Eu não sei uma boa maneira de verificar isso em bash , mas o Python tem um banco de dados Unicode integrado que você pode usar como em um script como este:

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

Você pode usar este script como este (supondo que você o chamou 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

O banco de dados lança uma exceção ValueError para qualquer caractere que ele não conhece, portanto, imprimimos seus pontos de código em decimal (geralmente são caracteres não imprimíveis).

Advertência: o script presume que seu terminal é codificado em UTF-8. Se não for, você deve alterar o argumento do método decode() . O Python suporta uma seleção muito ampla de codificações, e você definitivamente estará lá.

    
por 15.03.2012 / 17:25