在 bash 上查看文件中所有字母的 unicode 代码点

Kar*_*lek 14 linux unicode

我必须处理一个包含许多不可见控制字符的文件,例如“从右到左”或“零宽度非连接符”、与正常空间不同的空格等等,我在处理这个问题时遇到了麻烦。

现在,我想以某种方式逐个字母地查看给定文件中的所有字母(我想说“从左到右”,但不幸的是我正在处理从右到左的语言),作为 unicode 代码点,仅使用基本的 bash 工具(如vi, less, cat...)。有可能吗?

我知道我可以通过 以十六进制显示文件hexdump,但我必须重新计算代码点。我真的很想看到实际的 unicode 代码点,所以我可以用谷歌搜索它们并找出发生了什么。

编辑:我要补充一点,我不想将其转码为不同的编码(因为这是我在网上发现的)。我有 UTF8 格式的文件,这很好。我只想知道所有字母的确切代码点。

Kar*_*lek 11

我自己写了一个 perl one-liner,就是这样做的,它还打印了原始字符。(它需要来自 STDIN 的文件)

perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'
Run Code Online (Sandbox Code Playgroud)

但是,应该有比这更好的方法。

  • xxd 不显示 unicode (2认同)

Ste*_*ker 6

我需要一些常见笑脸的代码点,并想出了这个:

echo -n "" |              # -n ignore trailing newline                     \
iconv -f utf8 -t utf32be |  # UTF-32 big-endian happens to be the code point \
xxd -p |                    # -p just give me the plain hex                  \
sed -r 's/^0+/0x/' |        # remove leading 0's, replace with 0x            \
xargs printf 'U+%04X\n'     # pretty print the code point
Run Code Online (Sandbox Code Playgroud)

哪个打印

U+1F60A
Run Code Online (Sandbox Code Playgroud)

这是“SMILING FACE WITH SMILING EYES”的代码点。