Linux 'cat' 如何解码文件?

How does Linux 'cat' decode files?

我想知道 Linux cat 如何解码文件。假设它是一个英文文本文件,该命令似乎是用 ASCII 解码的,但是 cat 如何解码一个随机文件?

它绝对不解码任何东西。它只是一次读取一行并逐字节输出。

就正在进行的解码而言,它发生在您的终端软件中。您可能想了解您的 locale 如何影响系统的操作。

对于一个简短的实验,打印一些与您的终端不兼容的东西:

bash$ perl -e 'print("\xff\xff")'
��

现在观察 cat 如何影响它(即完全没有)

bash$ perl -e 'print("\xff\xff")' | cat
��

要更详细地检查发生了什么,可以向十六进制转储程序添加一个管道,例如 xxd:

bash$ perl -e 'print("\xff\xff")' | xxd
00000000: ffff

bash$  perl -e 'print("\xff\xff")' | cat | xxd
00000000: ffff

(假设您的语言环境输出不是实际字符的有效字节序列,例如 UTF-8。)

也许还可以看到 What is character encoding and why should I bother with it