cat
有一个-v
将非打印字符转换为插入符号的选项(如果我们不希望终端在cat
输出中逐字解释控制字符,这很有用)。
但据我了解,插入符号仅适用于 ASCII 字母表中的非打印字符。那么 UTF 中不属于 ASCII 的非打印字符(例如https://www.compart.com/en/unicode/category/Cc)呢?将使用什么符号cat -v
来显示这些?
cat
有一个-v
将非打印字符转换为插入符号的选项(如果我们不希望终端在cat
输出中逐字解释控制字符,这很有用)。
但据我了解,插入符号仅适用于 ASCII 字母表中的非打印字符。那么 UTF 中不属于 ASCII 的非打印字符(例如https://www.compart.com/en/unicode/category/Cc)呢?将使用什么符号cat -v
来显示这些?
我们可以生成一个包含前 256 个 UTF-8 Unicode 字符的文件:
这包括 Latin-1 Supplement 中的非 ASCII (C1) 控件,以及大量打印字符。
现在我们可以
cat -v
了:(我已经手动包装了它以便阅读)
你可以看到它在第四行的开头表示 U+0080 ,也就是 UTF-8
C2 80
,如M-BM-^@
.M-B
代表C2字节:B为0x42,所以M-
代表设置高位(即加0x80)。M-^@
对空字节(meta-ctrl-@)做同样的事情 -M-x
和^x
符号组合在一起。所有非 ASCII 码点都会发生同样的事情,这些码点将完全由 UTF-8 中的高字节组成,或者在任何其他编码中由所有字节 128-255 组成。不同
cat
的实现可能有自己的行为,因为-v
这不是标准cat
选项,但 GNU cat 和常见的 BSD 版本都以这种方式运行。