我希望能够跑步
unicode-names 'abç'
并查看对应的 Unicode 字符名称:
LATIN SMALL LETTER A
LATIN SMALL LETTER B
LATIN SMALL LETTER C WITH CEDILLA
将字符串打印为一系列 Unicode 字形名称在多种情况下很有用:
- 区分容易混淆的字符,例如“i”和“í”。
- 解释文字字符串实际包含的内容(例如不可打印或未分配的零宽度字符)。
答案1
这统一工具软件包中有程序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会发送一条通知,描述主要 X11 选择中的非 ASCII 字符,您可能会发现这很有用。