
Я хотел бы уметь бегать
unicode-names 'abç'
и посмотрите соответствующие названия символов Unicode:
LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C WITH CEDILLA
Печать строки в виде серии имен глифов Unicode может быть полезна в нескольких случаях:
- Различайте легко путаемые символы, такие как «i» и «í».
- Объясните, что на самом деле содержит литеральная строка (например, непечатаемые или неназначенные символы нулевой ширины).
решение1
TheuniutilsВ пакете есть программа 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
решение2
Я не знаю хорошего способа проверить это bash
, но в Python есть встроенная база данных Unicode, которую можно использовать в таком скрипте:
#!/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)
Вы можете использовать этот скрипт следующим образом (предполагая, что вы его назвали 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
База данных выдает ValueError
исключение для любых неизвестных ей символов, поэтому мы выводим их кодовые точки в десятичном виде (обычно это непечатаемые символы).
Предостережение: скрипт предполагает, что ваш терминал имеет кодировку UTF-8. Если это не так, вам следует изменить аргумент метода decode()
. Python поддерживает очень широкий выбор кодировок, ваша определенно будет там.
решение3
Однажды я написал u
для этого такой скрипт:
#! /bin/sh -
exec perl -Mcharnames=full -Mopen=locale -lne '
printf "U+%04X %s\n", ord($_), charnames::viacode(ord($_)) for /./g' -- "$@"
Используется в качестве:
$ u <<< '棽'
U+0119 LATIN SMALL LETTER E WITH OGONEK
U+00A3 POUND SIGN
U+00BD VULGAR FRACTION ONE HALF
У меня также есть эта openbox
(моего оконного менеджера) привязка клавиш:
<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>
При нажатии Windows+ Jотправляется уведомление с описанием не-ASCII символов в основном выборе X11, что может оказаться полезным.