当我捕获非文本文件时会发生什么?

当我捕获非文本文件时会发生什么?

当我在不仅仅是文本的文件上运行 cat 时,它会返回大量字符(其中许多字符看起来像这样 ���)。这个数据是什么?

答案1

非文本文件中的许多数据无法使用任何可用字符集中的字符来表示。当这些数据被 cat 处理并显示在屏幕上时,它会显示为 ��� 或其他无意义的字符,因为没有其他方式来显示它们。

答案2

其实�并不是一个“无意义的人物”。这就是统一码替换字符。当尝试显示不是合法 UTF-8 代码的字节时,它会显示在使用 UTF-8 编码的终端中。它可能当终端可用的字体不提供特定的字体时显示(但可能性很小)合法的Unicode 值,但在这种情况下更有可能显示空白。

通常,代码 32-126(US-ASCII,POSIX 便携式字符集)是可打印的。代码 160-255 可在 ISO-8859-1 编码中打印,但是不是作为 UTF-8,因为它们是构成 UTF-8 编码的 Unicode 值的两个或多个字节之一。同样,代码 128-159 是 ISO-8859-1(和非打印)中的控制字符,但在 UTF-8 中,这些是两个或多个字节之一,等等。

如果您cat是非文本文件,则它可能具有 128-255 范围内的字节,并且这些字节不太可能形成合法的 UTF-8 值。所以你会看到�.

进一步阅读:

相关内容