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

l0b*_*0b0 12 command-line unicode

我希望能够跑步

unicode-names 'abç'
Run Code Online (Sandbox Code Playgroud)

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

LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C WITH CEDILLA
Run Code Online (Sandbox Code Playgroud)

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

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

don*_*lly 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
Run Code Online (Sandbox Code Playgroud)


Ale*_*ios 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)
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用这个脚本(假设你调用了它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
Run Code Online (Sandbox Code Playgroud)

数据库会ValueError针对它不知道的任何字符抛出异常,因此我们以十进制打印它们的代码点(通常这些是不可打印的字符)。

警告:脚本假定您的终端是 UTF-8 编码的。如果不是,您应该更改decode()方法的参数。Python 支持非常广泛的编码选择,你肯定会在那里。