图像文件中的奇怪字符是什么?

图像文件中的奇怪字符是什么?

所以我对Linux很陌生,我正在学习基本命令。我也很想知道事物在幕后是如何工作的,所以在我学习了 cat 和 nano 命令之后,我尝试在图像上使用它们,然后出现了所有这些奇怪的符号(linux mint):

使用 nano 后将图像 (index.jpeg) 作为文件

我也在kali上尝试过,我得到了同样的结果,所以我相信这与图像在位级别上的存储方式有关,但我又在开始时,我找不到任何关于这些符号到底是什么的解释意思是。

答案1

所有文件都是由1和0组成,每一个称为一个位。一个“字节”是 8 位。对于 8 位,1 和 0 有 256 种可能的组合。

纯文本文件中的数据(即nano要编辑的数据(终端期望使用 输出cat))被划分为字节。通常,文件中的每个字符组成一个字节。例如,在 ASCII 编码中,字母“A”是字节 01000001。某些字符编码(如 UTF-8)有时会使用多个字节来表示一个字符,因为它们需要覆盖的字符超过 256 个,但它们仍然将文件成字节。 (还有用于“控制字符”的字节,例如用于换行符的“Control-J”。)

图像是二进制文件,不是文本文件;它们的位也可以分为字节,但这些字节并不意味着表示字符/字母。

当非文本文件作为文本文件打开时,文本编辑器会尝试解释二进制文件的字节,就好像它们要表示字符一样。由于它们无意这样做,因此二进制文件的字节与这些相同字节在文件实际上是文本文件时所代表的字符之间存在相当大的随机相关性。然而,这就是 nano 试图将文件解释为的内容,因此您会得到随机字符,其中许多是控制字符,通常不打算打印,因此会产生奇怪的结果。

无论如何,这就是我理解正在发生的事情的方式。我无论如何都不是一名计算机科学家,所以我希望评论者在需要时能够改进我的答案。

显然,如果您想编辑图像,您应该使用 gimp 或 krita 等图像编辑器,而不是文本编辑器。我可以假设您使用二进制编辑器或十六进制编辑器等,但这需要非常详细地了解图像格式如何将其表示的数据转换为位和字节,我认为这对于不同的图像格式是不同的。

相关内容