我正在使用 Adobe Source Code Pro 字体在简单的终端上运行 Arch Linux。我的语言环境正确设置为LANG=en_US.UTF-8
.
我想将代表扑克牌的 Unicode 字符打印到我的终端。我正在使用维基百科作为参考。
卡片套装的 Unicode 字符可以正常工作。例如,发出
$ printf "\u2660"
在屏幕上打印一个黑色的心。
但是,我在使用特定的扑克牌时遇到了麻烦。发行
$ printf "\u1F0A1"
打印符号Ἂ1
而不是黑桃 ?。怎么了?
这个问题在几个终端(urxvt、xterm、termite)和我尝试过的每种字体(DejaVu、Inconsolata)上都存在。
help printf
defers toprintf(1)
解释转义序列,GNU printf 的文档说:Bash 手册中为ANSI C 引用指定了类似的内容,并且
echo
:简而言之:
\u
不适用于 5 个十六进制数字。它是\U
:Muru 的回答是完全正确的,但只是为了澄清一点:
当您打印
\u1F0A1
时,它被解释为十六位 Unicode 转义\u1F0A
,后跟文字字符1
(因为\u
需要以下四个字符,不多也不少)。U+1F0A 然后给出Ἂ
, 一个带有几个变音符号的希腊字母(准确地说,是带有 Psili 和 Varia 的希腊大写字母 Alpha)。如果你想在你的 Unicode 转义中超过 16 位,你需要使用
\U
,它需要八个字符的十六进制值:\U0001F0A1
会给你一张扑克牌。