如何为输入字符串打印Unicode字形名称?


12

我希望能够跑步

unicode-names 'abç'

并查看相应的Unicode字符名称:

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

在多种情况下,将字符串打印为一系列Unicode字形名称将很有用:

  • 区分容易混淆的字符,例如“ i”和“í”。
  • 说明文字字符串实际包含的内容(例如,不可打印或未分配的零宽度字符)。

Answers:


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

1
对于仅使用名称的最小输出,请使用以下选项:echo -n …— | uniname -bcegpu
l0b0 2012年

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()
克里斯·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.