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
我想知道 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