它将它们写入标准输出。

它将它们写入标准输出。

好奇心就在这里。我对位图进行了 cat 编辑,并希望它为文件中的每个字节显示一个 ASCII 字符。因此,前几个字符符合预期(BM6),但我进一步注意到它还在终端中显示非 ASCII 字符,如“带”、“Ѿ”、“׷”等。

为什么是这样?猫在这里做什么?

(我使用的位图的bitsPerPixel=8,所以它不能表示多字节像素,对吧?)

答案1

它将它们写入标准输出。

接下来发生的事情取决于标准输出。如果是终端设备,则行为由终端决定,并且与以下无关cat

当谈到终端的行为时,有几件事很重要:

  • ASCII 是一种 7 位字符编码。 8 位字节可以表示的内容是 ASCII 字符集中的两倍。其他 128 个值的含义一直是一个主题很多在 20 世纪 70 年代、1980 年代和 1990 年代来回。我们有单字节编码、双字节编码、代码页、ISO 8859 以及 ASCII 本身的变体部分(或者在标准的后续版本中进行了更改)。这甚至还没有涉及 ISO 2022/ECMA-35 和可切换字符集的复杂性。

    有一个神话认为存在一个“纯 ASCII”世界。近半个世纪以来,情况并非如此。如今,您几乎永远不会遇到只查看实际 ASCII 的情况。

  • 如今,一个终端模拟器更可能的是,使用 UTF-8,一种 Unicode 的可变长度编码,其中每个代码点都是一个或多个字节。 15 年前,它开始变得司空见惯。
  • 甚至是你只使用 ASCII,有些字符是印刷字符,终端将呈现可打印图形,其他字符是控制字符,具有各种非打印效果(包括,在 ␀ 的情况下,根本没有效果)。 Unicode 更复杂,但只有某些代码点实际上可显示的基本思想仍然大致正确。
  • 终端根据字符编码将接收到的字节流解码为字符他们目前准备使用。各个终端的情况差异很大。终端模拟器通常有一些菜单选项,用户可以随意更改解码。

在紧握的手上,通过将位图打印到终端来查看位图cat是疯狂的。学习的快乐hexdump或者od根本不cat应该参与

相关内容