Как напечатать имена символов Unicode для входной строки?

12

Я хотел бы иметь возможность бежать

unicode-names 'abç'

и увидеть соответствующие имена символов Unicode:

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

Печать строки в виде серии имен символов Unicode будет полезна в нескольких случаях:

  • Различают легко запутанные символы, такие как «я» и «í».
  • Объясните, что на самом деле содержит буквальная строка (например, непечатаемые или неназначенные символы нулевой ширины).
l0b0
источник

Ответы:

14

В пакете uniutils есть программа 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
donothingsuccessfully
источник
1
Для минимального вывода только с именами используйте следующие параметры:echo -n …— | uniname -bcegpu
l0b0
8

Я не знаю хорошего способа проверить это 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 поддерживает очень широкий выбор кодировок, там обязательно найдутся ваши.

Алексиос
источник
1
Лучше - использовать sys.getdefaultencoding().
Крис Даун