你如何回应Bash中的4位Unicode字符?

mas*_*omi 207 unicode bash shell character-encoding

我想将Unicode骷髅和交叉骨添加到我的shell提示符中(特别是'SKULL AND CROSSBONES'(U + 2620)),但我无法弄清楚魔法咒语使回声吐出它或任何其他, 4位Unicode字符.两位数的一个很容易.例如,echo -e"\ x55",.

除了下面的答案之外,应该注意的是,显然,您的终端需要支持Unicode才能使输出符合您的预期.gnome-terminal做得很好,但默认情况下不一定开启.

在macOS的终端应用程序上转到Preferences-> Encodings并选择Unicode(UTF-8).

var*_*tec 215

在UTF-8中,它实际上是6位数(或3个字节).

$ printf '\xE2\x98\xA0'
?
Run Code Online (Sandbox Code Playgroud)

要检查它是如何由控制台编码的,请使用hexdump:

$ printf ? | hexdump
0000000 98e2 00a0                              
0000003
Run Code Online (Sandbox Code Playgroud)

  • 确实如此.我发现我使用的是`LANG = C`而不是`LANG = en_US.UTF-8`.现在我在Gnome的终端正确显示符号......真正的终端(tty1-6)仍然没有. (8认同)
  • 您还可以使用`$'...'`语法将编码字符放入变量中而不使用`$(...)`捕获子shell,以便在本身不解释转义序列的上下文中使用:`skull = $'\ xE2\x98\xA0'` (8认同)
  • 对于那些尝试hexdump的人:`0000000 f0 9f 8d ba`转换为`\ xf0\x9f\x8d\xba`.示例echo:`echo -e"\ xf0\x9f\x8d\xba"`. (6认同)
  • 我的输出" "而不是☠......为什么? (5认同)
  • 关于hexdump的另一件事:在我的机器上,答案中的第二个命令输出'0000000 98e2 00a0`.当然`0000000`只是一个不重要的偏移量,但它转换为`\ xe2\x98\xa0`后的字节,因为机器使用小端字节顺序. (5认同)
  • @trusktr:你没有使用UTF-8终端 (2认同)
  • 如果您的bash可以输出下面的字符,请转到:http://unicode-table.com/en/#2591然后将其复制粘贴到您的脚本中,玩得开心. (2认同)

Jul*_*ano 90

% echo -e '\u2620'     # \u takes four hexadecimal digits
?
% echo -e '\U0001f602' # \U takes eight hexadecimal digits

Run Code Online (Sandbox Code Playgroud)

这适用于Zsh(我已经检查过4.3版本)和Bash 4.2或更新版本.

  • 在Bash 4.2中添加了对\ u的支持. (29认同)
  • 当我这样做时,它就会吐出来. (13认同)
  • 有一个使用 ANSI 字符串 `echo $'\U1f602'` 的版本 (5认同)
  • @Flimm使用大写U:`echo -e'\ U1f602'`有效,你也可以这样使用变量:`x = $'\ U1f602'`.试试吧!`echo $ x` (3认同)
  • 对不起,忘了说我用的是zsh. (2认同)
  • 不适用于我,Mac OS 10.14.2,bash(GNU bash,版本3.2.57(1)-发行版(x86_64-apple-darwin18))。它只是打印出输入-$ echo -e'\ u2620'<enter>只是打印出:\ u2620 (2认同)

Rob*_*obM 67

只要您的文本编辑器可以处理Unicode(可能以UTF-8编码),您就可以直接输入Unicode代码点.

例如,在Vim文本编辑器中,您将进入插入模式并按Ctrl+ V+ U然后将代码点编号作为4位十六进制数字(如果需要,使用零填充).所以你要键入Ctrl+ V+ U 2 6 2 0.请参阅:将Unicode字符插入文档的最简单方法是什么?

在运行Bash的终端上,您可以键入CTRL+ SHIFT+ U并键入所需字符的十六进制代码点.在输入过程中,光标应显示带下划线u.您键入的第一个非数字结束输入,并呈现该字符.因此,您可以使用以下方法在Bash中打印U + 2620:

echo CTRL+ SHIFT+U2620ENTERENTER

(第一个输入结束Unicode输入,第二个输入结束echo命令.)

信用:询问Ubuntu SE

  • 注意:这只适用于运行Bash的终端,只有当你在GTK +**环境下运行它时,就像Gnome一样. (5认同)
  • 十六进制代码点的一个很好的来源是http://unicodelookup.com/#0x2620/1 (2认同)
  • “CSu 2 6 2 0”的功能是终端仿真器、X 输入法 (XIM) 或类似工具的一项功能。AFAIK,您将无法将“SHIFT”和“CTRL”同时发送到终端层。终端只用字符说话,而不是像 X 服务器那样用键盘符号和键码(而且,它的所有意图和目的都是 7 位的)。在这个世界中,“CTRL”屏蔽了 4 个最高有效位(& 0b00001111),这导致 (2认同)

Orw*_*ile 31

这是一个完全内部的Bash实现,没有分叉,无限大小的Unicode字符.

fast_chr() {
    local __octal
    local __char
    printf -v __octal '%03o' $1
    printf -v __char \\$__octal
    REPLY=$__char
}

function unichr {
    local c=$1    # Ordinal of char
    local l=0    # Byte ctr
    local o=63    # Ceiling
    local p=128    # Accum. bits
    local s=''    # Output string

    (( c < 0x80 )) && { fast_chr "$c"; echo -n "$REPLY"; return; }

    while (( c > o )); do
        fast_chr $(( t = 0x80 | c & 0x3f ))
        s="$REPLY$s"
        (( c >>= 6, l++, p += o+1, o>>=1 ))
    done

    fast_chr $(( t = p | c ))
    echo -n "$REPLY$s"
}

## test harness
for (( i=0x2500; i<0x2600; i++ )); do
    unichr $i
done
Run Code Online (Sandbox Code Playgroud)

产出是:

????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
Run Code Online (Sandbox Code Playgroud)


Joa*_*uer 14

只需在shell脚本中加入"☠"即可.在正确的区域设置和启用Unicode的控制台上,它将打印得很好:

$ echo ?
?
$
Run Code Online (Sandbox Code Playgroud)

一个丑陋的"解决方法"是输出UTF-8序列,但这也取决于使用的编码:

$ echo -e '\xE2\x98\xA0'
?
$
Run Code Online (Sandbox Code Playgroud)


小智 12

快速单行将UTF-8字符转换为3字节格式:

var="$(echo -n '?' | od -An -tx1)"; printf '\\x%s' ${var^^}; echo
Run Code Online (Sandbox Code Playgroud)

  • UTF-8字符可以是1-4字节序列 (7认同)
  • 我不会调用上面的示例*quick*(带有11个命令及其参数)...此外,它只处理3个字节的UTF-8字符`(UTF-8字符可以是1,2或3个字节).这有点短,适用于1-3 +++字节:`printf"\\\ x%s"$(printf'☠'| xxd -p -c1 -u)`....*xxd*作为'vim-common'包的一部分发货 (5认同)
  • 好神人.考虑:`codepoints(){printf'U +%04x \n'$ {@ /#/ \'}; }; 代码点A R☯z` ...享受 (2认同)

Met*_*l3d 8

我正在使用这个:

$ echo -e '\u2620'
?
Run Code Online (Sandbox Code Playgroud)

这比搜索十六进制表示要容易得多......我在shell脚本中使用它.这适用于gnome-term和urxvt AFAIK.

  • 遗憾的是,这在OS X上不起作用.:/ (7认同)
  • @masukomi如果你知道如何使用brew,你可以安装一个更新的bash并使用它.使用升级后的bash时,上面的mac终端上工作正常. (2认同)

小智 7

这三个命令中的任何一个都将在控制台中打印您想要的字符,前提是控制台接受UTF-8字符(大多数当前接受):

echo -e "SKULL AND CROSSBONES (U+2620) \U02620"
echo $'SKULL AND CROSSBONES (U+2620) \U02620'
printf "%b" "SKULL AND CROSSBONES (U+2620) \U02620\n"

SKULL AND CROSSBONES (U+2620) ?
Run Code Online (Sandbox Code Playgroud)

之后,您可以将实际字形(图像、字符)复制并粘贴到任何(支持 UTF-8 的)文本编辑器。

如果您需要查看此类 Unicode 代码点是如何以 UTF-8 编码的,请使用 xxd(比 od 更好的十六进制查看器):

echo $'(U+2620) \U02620' | xxd
0000000: 2855 2b32 3632 3029 20e2 98a0 0a         (U+2620) ....

That means that the UTF8 encoding is: e2 98 a0
Run Code Online (Sandbox Code Playgroud)

或者,在十六进制中避免错误:0xE2 0x98 0xA0。即,空格 (HEX 20) 和换行符 (Hex 0A) 之间的值。

如果您想深入了解将数字转换为字符:请看这里,查看 Greg 的 wiki (BashFAQ) 中有关 Bash 中 ASCII 编码的文章!


cms*_*cms 6

您可能需要将代码点编码为八进制,以便快速扩展以正确解码它.

编码为UTF-8的U + 2620是E2 98 A0.

所以在Bash,

export PS1="\342\230\240"
Run Code Online (Sandbox Code Playgroud)

会让你的贝壳提示进入头骨和骨头.


use*_*016 6

在bash中打印Unicode字符以输出,请使用\ x,\ u或\ U(第一个代表2位十六进制,第二个代表4位十六进制,第三个代表任意长度)

echo -e '\U1f602'
Run Code Online (Sandbox Code Playgroud)

我想使用$'...'语法将其分配给变量

x=$'\U1f602'
echo $x
Run Code Online (Sandbox Code Playgroud)


小智 6

以下是所有可用的 Unicode 表情符号列表:

https://en.wikipedia.org/wiki/Emoji#Unicode_blocks

例子:

echo -e "\U1F304"

Run Code Online (Sandbox Code Playgroud)

要获取此字符的 ASCII 值,请使用 hexdump

echo -e "" | hexdump -C

00000000  f0 9f 8c 84 0a                                    |.....|
00000005
Run Code Online (Sandbox Code Playgroud)

然后使用以十六进制格式通知的值

echo -e "\xF0\x9F\x8C\x84\x0A"

Run Code Online (Sandbox Code Playgroud)


Fli*_*imm 5

如果你不介意 Perl one-liner:

$ perl -CS -E 'say "\x{2620}"'
?
Run Code Online (Sandbox Code Playgroud)

-CS在输入上启用 UTF-8 解码,在输出上启用 UTF-8 编码。-E将下一个参数评估为 Perl,具有say启用等现代功能。如果您不想在结尾处换行,请使用print代替say


Tin*_*ino 5

很抱歉重提这个老问题。但是当使用时,bash有一种非常简单的方法可以从纯 ASCII 输入创建 Unicode 代码点,它甚至根本不会分叉

unicode() { local -n a="$1"; local c; printf -vc '\\U%08x' "$2"; printf -va "$c"; }
unicodes() { local a c; for a; do printf -vc '\\U%08x' "$a"; printf "$c"; done; };
Run Code Online (Sandbox Code Playgroud)

如下使用它来定义某些代码点

unicode crossbones 0x2620
echo "$crossbones"
Run Code Online (Sandbox Code Playgroud)

或者将前 65536 个 unicode 代码点转储到标准输出(在我的机器上花费不到 2s。额外的空间是为了防止某些字符由于 shell 的等宽字体而相互流入):

for a in {0..65535}; do unicodes "$a"; printf ' '; done
Run Code Online (Sandbox Code Playgroud)

或者讲一个非常典型的父母的故事(这需要 Unicode 2010):

unicodes 0x1F6BC 32 43 32 0x1F62D 32 32 43 32 0x1F37C 32 61 32 0x263A 32 32 43 32 0x1F4A9 10
Run Code Online (Sandbox Code Playgroud)

解释:

  • printf '\UXXXXXXXX' 打印出任何 Unicode 字符
  • printf '\\U%08x' number打印\UXXXXXXXX转换为十六进制的数字,然后将其馈送到另一个printf以实际打印出 Unicode 字符
  • printf 将八进制 (0oct)、十六进制 (0xHEX) 和十进制(0 或以 1 到 9 开头的数字)识别为数字,因此您可以选择最适合的表示形式
  • printf -v var ..将 的输出收集printf到一个变量中,无需分叉(这极大地加快了速度)
  • local variable 有没有不污染全局命名空间
  • local -n var=other别名varother,这样赋值就var改变了other。这里一个有趣的部分是,它var是本地命名空间的other一部分,而它是全局命名空间的一部分。
    • 请注意,因为没有这样的事情localglobal命名空间bash。变量保存在环境中,而且这些变量始终是全局的。Local 只是将当前值放在一边,并在函数再次离开时恢复它。从函数内调用的其他函数local仍然会看到“本地”值。这是一个与在其他语言中发现的所有正常范围规则根本不同的概念(bash如果你是一个不知道这一点的程序员,它的作用非常强大,但可能会导致错误)。


Dmi*_*try 5

在重击中:

\n\n
UnicodePointToUtf8()\n{\n    local x="$1"               # ok if \'0x2620\'\n    x=${x/\\\\u/0x}              # \'\\u2620\' -> \'0x2620\'\n    x=${x/U+/0x}; x=${x/u+/0x} # \'U-2620\' -> \'0x2620\'\n    x=$((x)) # from hex to decimal\n    local y=$x n=0\n    [ $x -ge 0 ] || return 1\n    while [ $y -gt 0 ]; do y=$((y>>1)); n=$((n+1)); done\n    if [ $n -le 7 ]; then       # 7\n        y=$x\n    elif [ $n -le 11 ]; then    # 5+6\n        y=" $(( ((x>> 6)&0x1F)+0xC0 )) \\\n            $(( (x&0x3F)+0x80 ))" \n    elif [ $n -le 16 ]; then    # 4+6+6\n        y=" $(( ((x>>12)&0x0F)+0xE0 )) \\\n            $(( ((x>> 6)&0x3F)+0x80 )) \\\n            $(( (x&0x3F)+0x80 ))"\n    else                        # 3+6+6+6\n        y=" $(( ((x>>18)&0x07)+0xF0 )) \\\n            $(( ((x>>12)&0x3F)+0x80 )) \\\n            $(( ((x>> 6)&0x3F)+0x80 )) \\\n            $(( (x&0x3F)+0x80 ))"\n    fi\n    printf -v y \'\\\\x%x\' $y\n    echo -n -e $y\n}\n\n# test\nfor (( i=0x2500; i<0x2600; i++ )); do\n    UnicodePointToUtf8 $i\n    [ "$(( i+1 & 0x1f ))" != 0 ] || echo ""\ndone\nx=\'U+2620\'\necho "$x -> $(UnicodePointToUtf8 $x)"\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
\xe2\x94\x80\xe2\x94\x81\xe2\x94\x82\xe2\x94\x83\xe2\x94\x84\xe2\x94\x85\xe2\x94\x86\xe2\x94\x87\xe2\x94\x88\xe2\x94\x89\xe2\x94\x8a\xe2\x94\x8b\xe2\x94\x8c\xe2\x94\x8d\xe2\x94\x8e\xe2\x94\x8f\xe2\x94\x90\xe2\x94\x91\xe2\x94\x92\xe2\x94\x93\xe2\x94\x94\xe2\x94\x95\xe2\x94\x96\xe2\x94\x97\xe2\x94\x98\xe2\x94\x99\xe2\x94\x9a\xe2\x94\x9b\xe2\x94\x9c\xe2\x94\x9d\xe2\x94\x9e\xe2\x94\x9f\n\xe2\x94\xa0\xe2\x94\xa1\xe2\x94\xa2\xe2\x94\xa3\xe2\x94\xa4\xe2\x94\xa5\xe2\x94\xa6\xe2\x94\xa7\xe2\x94\xa8\xe2\x94\xa9\xe2\x94\xaa\xe2\x94\xab\xe2\x94\xac\xe2\x94\xad\xe2\x94\xae\xe2\x94\xaf\xe2\x94\xb0\xe2\x94\xb1\xe2\x94\xb2\xe2\x94\xb3\xe2\x94\xb4\xe2\x94\xb5\xe2\x94\xb6\xe2\x94\xb7\xe2\x94\xb8\xe2\x94\xb9\xe2\x94\xba\xe2\x94\xbb\xe2\x94\xbc\xe2\x94\xbd\xe2\x94\xbe\xe2\x94\xbf\n\xe2\x95\x80\xe2\x95\x81\xe2\x95\x82\xe2\x95\x83\xe2\x95\x84\xe2\x95\x85\xe2\x95\x86\xe2\x95\x87\xe2\x95\x88\xe2\x95\x89\xe2\x95\x8a\xe2\x95\x8b\xe2\x95\x8c\xe2\x95\x8d\xe2\x95\x8e\xe2\x95\x8f\xe2\x95\x90\xe2\x95\x91\xe2\x95\x92\xe2\x95\x93\xe2\x95\x94\xe2\x95\x95\xe2\x95\x96\xe2\x95\x97\xe2\x95\x98\xe2\x95\x99\xe2\x95\x9a\xe2\x95\x9b\xe2\x95\x9c\xe2\x95\x9d\xe2\x95\x9e\xe2\x95\x9f\n\xe2\x95\xa0\xe2\x95\xa1\xe2\x95\xa2\xe2\x95\xa3\xe2\x95\xa4\xe2\x95\xa5\xe2\x95\xa6\xe2\x95\xa7\xe2\x95\xa8\xe2\x95\xa9\xe2\x95\xaa\xe2\x95\xab\xe2\x95\xac\xe2\x95\xad\xe2\x95\xae\xe2\x95\xaf\xe2\x95\xb0\xe2\x95\xb1\xe2\x95\xb2\xe2\x95\xb3\xe2\x95\xb4\xe2\x95\xb5\xe2\x95\xb6\xe2\x95\xb7\xe2\x95\xb8\xe2\x95\xb9\xe2\x95\xba\xe2\x95\xbb\xe2\x95\xbc\xe2\x95\xbd\xe2\x95\xbe\xe2\x95\xbf\n\xe2\x96\x80\xe2\x96\x81\xe2\x96\x82\xe2\x96\x83\xe2\x96\x84\xe2\x96\x85\xe2\x96\x86\xe2\x96\x87\xe2\x96\x88\xe2\x96\x89\xe2\x96\x8a\xe2\x96\x8b\xe2\x96\x8c\xe2\x96\x8d\xe2\x96\x8e\xe2\x96\x8f\xe2\x96\x90\xe2\x96\x91\xe2\x96\x92\xe2\x96\x93\xe2\x96\x94\xe2\x96\x95\xe2\x96\x96\xe2\x96\x97\xe2\x96\x98\xe2\x96\x99\xe2\x96\x9a\xe2\x96\x9b\xe2\x96\x9c\xe2\x96\x9d\xe2\x96\x9e\xe2\x96\x9f\n\xe2\x96\xa0\xe2\x96\xa1\xe2\x96\xa2\xe2\x96\xa3\xe2\x96\xa4\xe2\x96\xa5\xe2\x96\xa6\xe2\x96\xa7\xe2\x96\xa8\xe2\x96\xa9\xe2\x96\xaa\xe2\x96\xab\xe2\x96\xac\xe2\x96\xad\xe2\x96\xae\xe2\x96\xaf\xe2\x96\xb0\xe2\x96\xb1\xe2\x96\xb2\xe2\x96\xb3\xe2\x96\xb4\xe2\x96\xb5\xe2\x96\xb6\xe2\x96\xb7\xe2\x96\xb8\xe2\x96\xb9\xe2\x96\xba\xe2\x96\xbb\xe2\x96\xbc\xe2\x96\xbd\xe2\x96\xbe\xe2\x96\xbf\n\xe2\x97\x80\xe2\x97\x81\xe2\x97\x82\xe2\x97\x83\xe2\x97\x84\xe2\x97\x85\xe2\x97\x86\xe2\x97\x87\xe2\x97\x88\xe2\x97\x89\xe2\x97\x8a\xe2\x97\x8b\xe2\x97\x8c\xe2\x97\x8d\xe2\x97\x8e\xe2\x97\x8f\xe2\x97\x90\xe2\x97\x91\xe2\x97\x92\xe2\x97\x93\xe2\x97\x94\xe2\x97\x95\xe2\x97\x96\xe2\x97\x97\xe2\x97\x98\xe2\x97\x99\xe2\x97\x9a\xe2\x97\x9b\xe2\x97\x9c\xe2\x97\x9d\xe2\x97\x9e\xe2\x97\x9f\n\xe2\x97\xa0\xe2\x97\xa1\xe2\x97\xa2\xe2\x97\xa3\xe2\x97\xa4\xe2\x97\xa5\xe2\x97\xa6\xe2\x97\xa7\xe2\x97\xa8\xe2\x97\xa9\xe2\x97\xaa\xe2\x97\xab\xe2\x97\xac\xe2\x97\xad\xe2\x97\xae\xe2\x97\xaf\xe2\x97\xb0\xe2\x97\xb1\xe2\x97\xb2\xe2\x97\xb3\xe2\x97\xb4\xe2\x97\xb5\xe2\x97\xb6\xe2\x97\xb7\xe2\x97\xb8\xe2\x97\xb9\xe2\x97\xba\xe2\x97\xbb\xe2\x97\xbc\xe2\x97\xbd\xe2\x97\xbe\xe2\x97\xbf\nU+2620 -> \xe2\x98\xa0\n
Run Code Online (Sandbox Code Playgroud)\n


F. *_*uri 5

在中使用 UTF8bash

\n

升级2023...

\n

打印UTF8

\n

从前一段时间开始,使用%bprintf

\n
printf %b\\\\n \\\\U1F600\n\n
Run Code Online (Sandbox Code Playgroud)\n

将 UTF8 存储到变量中

\n

的内置-v标志来分配变量:printf

\n
printf -v smiley \\\\U1F600\necho $smiley \n\n
Run Code Online (Sandbox Code Playgroud)\n

严格回答SO问题:

\n
user@host:~$ printf -v skull %b \'\\U2620\'\nuser@host:~$ PS1=${PS1/%\\\\$ /$skull\\\\$ }\nuser@host:~\xe2\x98\xa0$ \n
Run Code Online (Sandbox Code Playgroud)\n

可以胜任这份工作。(注释%b几乎没用)

\n

显示表格的一部分

\n

然后快速显示 unicode 表的某些部分:

\n
printf %b\\\\n \\\\U1F6{{0..9},{A..F}}{{0..9},{a..f}}|paste -d\\  -{,,,}{,,,}\n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n               \n
Run Code Online (Sandbox Code Playgroud)\n

显示盲文部分:

\n
printf %b\\\\n \\\\U28{{0..9},{A..F}}{{0..9},{a..f}}|paste -d\\  -{,,,}{,,,}\n\xe2\xa0\x80 \xe2\xa0\x81 \xe2\xa0\x82 \xe2\xa0\x83 \xe2\xa0\x84 \xe2\xa0\x85 \xe2\xa0\x86 \xe2\xa0\x87 \xe2\xa0\x88 \xe2\xa0\x89 \xe2\xa0\x8a \xe2\xa0\x8b \xe2\xa0\x8c \xe2\xa0\x8d \xe2\xa0\x8e \xe2\xa0\x8f\n\xe2\xa0\x90 \xe2\xa0\x91 \xe2\xa0\x92 \xe2\xa0\x93 \xe2\xa0\x94 \xe2\xa0\x95 \xe2\xa0\x96 \xe2\xa0\x97 \xe2\xa0\x98 \xe2\xa0\x99 \xe2\xa0\x9a \xe2\xa0\x9b \xe2\xa0\x9c \xe2\xa0\x9d \xe2\xa0\x9e \xe2\xa0\x9f\n\xe2\xa0\xa0 \xe2\xa0\xa1 \xe2\xa0\xa2 \xe2\xa0\xa3 \xe2\xa0\xa4 \xe2\xa0\xa5 \xe2\xa0\xa6 \xe2\xa0\xa7 \xe2\xa0\xa8 \xe2\xa0\xa9 \xe2\xa0\xaa \xe2\xa0\xab \xe2\xa0\xac \xe2\xa0\xad \xe2\xa0\xae \xe2\xa0\xaf\n\xe2\xa0\xb0 \xe2\xa0\xb1 \xe2\xa0\xb2 \xe2\xa0\xb3 \xe2\xa0\xb4 \xe2\xa0\xb5 \xe2\xa0\xb6 \xe2\xa0\xb7 \xe2\xa0\xb8 \xe2\xa0\xb9 \xe2\xa0\xba \xe2\xa0\xbb \xe2\xa0\xbc \xe2\xa0\xbd \xe2\xa0\xbe \xe2\xa0\xbf\n\xe2\xa1\x80 \xe2\xa1\x81 \xe2\xa1\x82 \xe2\xa1\x83 \xe2\xa1\x84 \xe2\xa1\x85 \xe2\xa1\x86 \xe2\xa1\x87 \xe2\xa1\x88 \xe2\xa1\x89 \xe2\xa1\x8a \xe2\xa1\x8b \xe2\xa1\x8c \xe2\xa1\x8d \xe2\xa1\x8e \xe2\xa1\x8f\n\xe2\xa1\x90 \xe2\xa1\x91 \xe2\xa1\x92 \xe2\xa1\x93 \xe2\xa1\x94 \xe2\xa1\x95 \xe2\xa1\x96 \xe2\xa1\x97 \xe2\xa1\x98 \xe2\xa1\x99 \xe2\xa1\x9a \xe2\xa1\x9b \xe2\xa1\x9c \xe2\xa1\x9d \xe2\xa1\x9e \xe2\xa1\x9f\n\xe2\xa1\xa0 \xe2\xa1\xa1 \xe2\xa1\xa2 \xe2\xa1\xa3 \xe2\xa1\xa4 \xe2\xa1\xa5 \xe2\xa1\xa6 \xe2\xa1\xa7 \xe2\xa1\xa8 \xe2\xa1\xa9 \xe2\xa1\xaa \xe2\xa1\xab \xe2\xa1\xac \xe2\xa1\xad \xe2\xa1\xae \xe2\xa1\xaf\n\xe2\xa1\xb0 \xe2\xa1\xb1 \xe2\xa1\xb2 \xe2\xa1\xb3 \xe2\xa1\xb4 \xe2\xa1\xb5 \xe2\xa1\xb6 \xe2\xa1\xb7 \xe2\xa1\xb8 \xe2\xa1\xb9 \xe2\xa1\xba \xe2\xa1\xbb \xe2\xa1\xbc \xe2\xa1\xbd \xe2\xa1\xbe \xe2\xa1\xbf\n\xe2\xa2\x80 \xe2\xa2\x81 \xe2\xa2\x82 \xe2\xa2\x83 \xe2\xa2\x84 \xe2\xa2\x85 \xe2\xa2\x86 \xe2\xa2\x87 \xe2\xa2\x88 \xe2\xa2\x89 \xe2\xa2\x8a \xe2\xa2\x8b \xe2\xa2\x8c \xe2\xa2\x8d \xe2\xa2\x8e \xe2\xa2\x8f\n\xe2\xa2\x90 \xe2\xa2\x91 \xe2\xa2\x92 \xe2\xa2\x93 \xe2\xa2\x94 \xe2\xa2\x95 \xe2\xa2\x96 \xe2\xa2\x97 \xe2\xa2\x98 \xe2\xa2\x99 \xe2\xa2\x9a \xe2\xa2\x9b \xe2\xa2\x9c \xe2\xa2\x9d \xe2\xa2\x9e \xe2\xa2\x9f\n\xe2\xa2\xa0 \xe2\xa2\xa1 \xe2\xa2\xa2 \xe2\xa2\xa3 \xe2\xa2\xa4 \xe2\xa2\xa5 \xe2\xa2\xa6 \xe2\xa2\xa7 \xe2\xa2\xa8 \xe2\xa2\xa9 \xe2\xa2\xaa \xe2\xa2\xab \xe2\xa2\xac \xe2\xa2\xad \xe2\xa2\xae \xe2\xa2\xaf\n\xe2\xa2\xb0 \xe2\xa2\xb1 \xe2\xa2\xb2 \xe2\xa2\xb3 \xe2\xa2\xb4 \xe2\xa2\xb5 \xe2\xa2\xb6 \xe2\xa2\xb7 \xe2\xa2\xb8 \xe2\xa2\xb9 \xe2\xa2\xba \xe2\xa2\xbb \xe2\xa2\xbc \xe2\xa2\xbd \xe2\xa2\xbe \xe2\xa2\xbf\n\xe2\xa3\x80 \xe2\xa3\x81 \xe2\xa3\x82 \xe2\xa3\x83 \xe2\xa3\x84 \xe2\xa3\x85 \xe2\xa3\x86 \xe2\xa3\x87 \xe2\xa3\x88 \xe2\xa3\x89 \xe2\xa3\x8a \xe2\xa3\x8b \xe2\xa3\x8c \xe2\xa3\x8d \xe2\xa3\x8e \xe2\xa3\x8f\n\xe2\xa3\x90 \xe2\xa3\x91 \xe2\xa3\x92 \xe2\xa3\x93 \xe2\xa3\x94 \xe2\xa3\x95 \xe2\xa3\x96 \xe2\xa3\x97 \xe2\xa3\x98 \xe2\xa3\x99 \xe2\xa3\x9a \xe2\xa3\x9b \xe2\xa3\x9c \xe2\xa3\x9d \xe2\xa3\x9e \xe2\xa3\x9f\n\xe2\xa3\xa0 \xe2\xa3\xa1 \xe2\xa3\xa2 \xe2\xa3\xa3 \xe2\xa3\xa4 \xe2\xa3\xa5 \xe2\xa3\xa6 \xe2\xa3\xa7 \xe2\xa3\xa8 \xe2\xa3\xa9 \xe2\xa3\xaa \xe2\xa3\xab \xe2\xa3\xac \xe2\xa3\xad \xe2\xa3\xae \xe2\xa3\xaf\n\xe2\xa3\xb0 \xe2\xa3\xb1 \xe2\xa3\xb2 \xe2\xa3\xb3 \xe2\xa3\xb4 \xe2\xa3\xb5 \xe2\xa3\xb6 \xe2\xa3\xb7 \xe2\xa3\xb8 \xe2\xa3\xb9 \xe2\xa3\xba \xe2\xa3\xbb \xe2\xa3\xbc \xe2\xa3\xbd \xe2\xa3\xbe \xe2\xa3\xbf\n
Run Code Online (Sandbox Code Playgroud)\n

更好地进入一个小功能

\n
showU8_256() { \n    local i a\n    for a ;do\n        for i in {0..9} {A..F}; do\n            printf \'\\\\U%05Xx: %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b %b\\n\' \\\n                0x$a$i \\\\U$a${i}{{0..9},{A..F}}\n        done\n    done\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然后

\n
showU8_256 1f{3,4}\n\\U01F30x:                \n\\U01F31x:                \n\\U01F32x:                \n\\U01F33x:                \n\\U01F34x:                \n\\U01F35x:                \n\\U01F36x:                \n\\U01F37x:                \n\\U01F38x:                \n\\U01F39x:                \n\\U01F3Ax:                \n\\U01F3Bx:                \n\\U01F3Cx:                \n\\U01F3Dx:                \n\\U01F3Ex:                \n\\U01F3Fx:                \n\\U01F40x:                \n\\U01F41x:                \n\\U01F42x:                \n\\U01F43x:                \n\\U01F44x:                \n\\U01F45x:                \n\\U01F46x:                \n\\U01F47x:                \n\\U01F48x:                \n\\U01F49x:                \n\\U01F4Ax:                \n\\U01F4Bx:                \n\\U01F4Cx:                \n\\U01F4Dx:                \n\\U01F4Ex:                \n\\U01F4Fx:                \n
Run Code Online (Sandbox Code Playgroud)\n

浏览 unicode 表

\n

为此,在搜索了可靠的方法之后,我最终在 SuperUser Dumping /Browseful full unicode table上发布了我的 dumpUnicode脚本:

\n

不久:

\n
dumpUnicode() {\n  python3 -c $\'from unicodedata import name\\nfor i in range(0x10FFFF):\\n  try:\n    var = name(chr(i))\\n  except:\\n    var = None\\n  finally:\\n    if var:\n      print("\\\\\\\\U%06X: \\47%s\\47 %s" % (i,chr(i),var))\'; }\n
Run Code Online (Sandbox Code Playgroud)\n
dumpUnicode | grep SMIL.*SUNGLAS\\\\\\|FONDUE\n\\U01F60E: \'\' SMILING FACE WITH SUNGLASSES\n\\U01FAD5: \'\' FONDUE\n
Run Code Online (Sandbox Code Playgroud)\n

或者严格回答SO请求:

\n
dumpUnicode |grep "\' SKULL AND CROSSBONES"\n\\U002620: \'\xe2\x98\xa0\' SKULL AND CROSSBONES\n
Run Code Online (Sandbox Code Playgroud)\n

转换为 ASCII 值

\n

不是4 位数字,而是可变的字节数:

\n
printf -v skull \'%b\' \\\\U2620\nLANG=C printf -v skull %q $skull\nIFS=\\\' read -r _ skull _ <<<"$skull"\necho ${skull//\\\\/\\\\0} \n
Run Code Online (Sandbox Code Playgroud)\n
\\0342\\0230\\0240\n
Run Code Online (Sandbox Code Playgroud)\n
echo -e ${skull//\\\\/\\\\0} \n
Run Code Online (Sandbox Code Playgroud)\n
\xe2\x98\xa0\n
Run Code Online (Sandbox Code Playgroud)\n

作为一个函数:

\n
u8toBytes() { \n    local char\n    printf -v char %b "$1"\n    LANG=C printf -v char %q "$char"\n    IFS=\\\' read -r _ char _ <<< "$char"\n    echo ${char//\\\\/\\\\0}\n    echo -e ${char//\\\\/\\\\0}\n}\n
Run Code Online (Sandbox Code Playgroud)\n
u8toBytes \\\\U2620\n\\0342\\0230\\0240\n\xe2\x98\xa0\nu8toBytes \\\\UA0\n\\0302\\0240\n\xc2\xa0\nu8toBytes \n\\0360\\0237\\0230\\0216\n\n
Run Code Online (Sandbox Code Playgroud)\n