Linux“猫”如何解码文件?

zel*_*ell 0 linux command ascii decode utf-8

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

tri*_*eee 5

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

就解码而言,它发生在终端软件中。您可能想阅读有关如何locale影响系统操作的信息。

为了进行简短的实验,请打印与您的终端不兼容的内容:

bash$ perl -e 'print("\xff\xff")'
??
Run Code Online (Sandbox Code Playgroud)

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

bash$ perl -e 'print("\xff\xff")' | cat
??
Run Code Online (Sandbox Code Playgroud)

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

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

bash$  perl -e 'print("\xff\xff")' | cat | xxd
00000000: ffff
Run Code Online (Sandbox Code Playgroud)

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

也许也看到什么是字符编码,为什么我要打扰它