它绝对不会解码任何东西。它只是一次读取一行并逐字节输出。
就解码而言,它发生在终端软件中。您可能想阅读有关如何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)不是有效的字节序列。)
也许也看到什么是字符编码,为什么我要打扰它