
Eu 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 glifos Unicode seria útil em vários casos:
- Distinguir caracteres facilmente confundidos 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).
Responder1
Ouniutilspacote tem o programa uniname
:
$ printf %s '…—' |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
Responder2
Não conheço uma boa maneira de verificar isso bash
, mas o Python possui um banco de dados Unicode integrado que você pode usar 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 assim (assumindo 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 ValueError
exceção para quaisquer caracteres que não conhece, então imprimimos seus pontos de código em decimal (geralmente são caracteres não imprimíveis).
Advertência: o script assume que seu terminal é codificado em UTF-8. Caso contrário, você deve alterar o argumento do decode()
método. Python suporta uma ampla seleção de codificações, a sua definitivamente estará lá.
Responder3
Certa vez, escrevi este u
script para isso:
#! /bin/sh -
exec perl -Mcharnames=full -Mopen=locale -lne '
printf "U+%04X %s\n", ord($_), charnames::viacode(ord($_)) for /./g' -- "$@"
Usado como:
$ u <<< '棽'
U+0119 LATIN SMALL LETTER E WITH OGONEK
U+00A3 POUND SIGN
U+00BD VULGAR FRACTION ONE HALF
Eu também tenho esta openbox
ligação de tecla (meu gerenciador de janelas):
<keybind key="W-J">
<action name="Execute">
<command>sh -c "notify-send -- \"$(xclip -o | perl -Mcharnames=:full -C -lne 'printf \"U+%04X %s\n\", $_, charnames::viacode($_) for map ord, /\P{ascii}/g')\""</command>
</action>
</keybind>
Que ao pressionar Windows+ Jenvia uma notificação descrevendo os caracteres não ASCII na seleção primária do X11, que pode ser útil.