cat 如何处理位图?

Mag*_*nus -1 cat

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

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

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

Jde*_*eBP 6

它将它们写入标准输出。

接下来会发生什么取决于标准输出是什么。如果是终端设备,则行为由终端决定,与无关cat

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

  • ASCII 是一种 7 位字符编码。一个 8 位字节可以表示两倍于 ASCII 字符集的内容。什么其他128个值的意思是已经的主题很多列在20世纪70年代,80年代和90年代回百。我们有单字节编码、双字节编码、代码页、ISO 8859 以及 ASCII 本身旨在变体的部分(或在标准的后续版本中更改的部分)。这甚至不是为了深入了解 ISO 2022/ECMA-35 和可切换字符集的复杂性。

    有一个神话说那里有一个“普通的 ASCII”世界。近半个世纪以来,情况并非如此。如今,您几乎永远不会遇到只查看实际 ASCII 的情况。

  • 如今,终端模拟器更有可能使用 UTF-8,这是一种 Unicode 的可变长度编码,其中每个代码点是一个或多个字节。15 年前,它开始变得司空见惯。
  • 即使您只使用 ASCII,有些字符是打印字符,终端将使用可打印图形呈现,而其他字符是控制字符,具有各种非打印效果(包括,在 ␀ 的情况下,在全部)。Unicode 更复杂,但实际上只有一些代码点可显示的基本思想仍然大致正确。
  • 终端根据当前设置使用的字符编码将接收到的字节流解码为字符。这从终端到终端有很大差异。终端仿真器通常有一些菜单选项,用户可以随心所欲地动态更改此解码。

在抓手上,通过将位图打印到终端来查看位图cat是疯狂的。学习的乐趣hexdumpod根本cat应该涉及