为什么用文本编辑器打开二进制文件时看不到二进制代码?

Tem*_*lar 56 hexdump

为什么用文本编辑器打开二进制文件时看不到二进制代码?例如,当我用文本编辑器打开一个图像时,我看到一些奇怪的字符和一些人类可读的字符;但图像应该以二进制编码。

Dan*_*eck 88

二进制文本数据没有分开:它们只是data。这取决于使它们成为一种或另一种的解释。如果您在文本编辑器中打开二进制数据(例如图像文件),其中大部分将没有意义,因为它不符合您选择的解释(作为文本)。

您所说的文本是可能的文件内容的一个子集:在给定字符集中转换为可读字符的数据。

例如,在ASCII 中,您可以看到,在 128 个“允许”值中,只有大约一半是字母和数字,30 个是标点符号,其余是控制字符。后一组在文本文件中使用不多,并且它们没有真正好的文本表示。其中一些是制表符换行符,文本编辑器已经需要在显示它们时发挥创意。

一些文本编辑器可以选择显式显示空格。然后,除了它们的常规格式化行为(这也只是对这些字符的解释)之外,它们实际上将被绘制为字符。

纯 ASCII 只能解释 128 个值。用于存储此信息的字节每个都有 256 个可能的值,因此 ASCII 中不允许有一半的可能值。例如,它们用于特定于区域的字符集,例如拉丁文 1,但在 ASCII 中,它们是未定义的。它们在只能处理 ASCII 的文本查看器中没有有用的表示。


二进制数据通常不被解释为文本。因此,在这些文件中,通常可以找到所有可能的字节值。其他一切都是浪费(这就是您可以很好地压缩文本的原因)。图像文件格式很复杂,您通常不会将它们视为文本,因此它们不需要可读。

由于没有将所有可能值映射到可读字符的通用数据解释(字符集),并且因为无论如何这都没有多大意义(因为它不是可读文本),所以主要部分显示为乱码。


十六进制编辑器为数据选择不同的表示形式:它将每个字节显示为两个十六进制数字。它只是一种不同的表示,并且具有易于人类阅读的字符集:所有 256 个可能的字节值都可以表示为两个十六进制数字。

由于二进制数据与十六进制之间的映射很容易,反之亦然(4 个二进制数字到一个十六进制数字/从一个十六进制数字),并且二进制每个数字包含的信息很少,因此十六进制通常是人类读取二进制的首选方式,除非有特定的偏爱不同表现形式的原因。


某些文本编辑器可能具有十六进制编辑器模式和一些尝试确定文件是文本文件还是二进制文件并自动选择一种模式或另一种模式的试探法。但这可能很难做到正确,而且它不是文件的特定属性,说明它是一种还是另一种。


某些 FTP 客户端要求您指定文本数据使用哪些文件结尾。然后这些程序将更改文件内容以匹配您所连接机器的操作系统,因为 Windows 使用CR/LF与 Linux 和 Unix(包括 Mac OS X; LF)不同的行结束字符序列 ( )。

  • 呃,LF 咬我的次数比我想记得的要多。 (4认同)

Ign*_*ams 38

因为您是在文本编辑器中打开的,而不是二进制编辑器

  • 如您所见,文本。 (22认同)
  • 不得不说:有人应该采取大胆的步骤来推出一个真正的二进制编辑器,带有 **Ones 和 Zeros**,(然后可能是带有相关十六进制/字符/十进制音译的单独窗格),其唯一目的是教这个那种东西。我知道他们不应该这样做,但是大众媒体和假装懂计算机的数学老师对渴望学习的孩子设定了错误的期望。 (2认同)

And*_*ner 17

这完全与上下文和解释有关。计算机中的高低电压模式或磁盘的磁化区域只有在我们决定如何解释它们时才有意义。

在不同的情况下,低-高-低-低-低-低-高的模式可能意味着数字 65、大写字母“A”、天蓝色、客户订购咖啡、日期“三月” 6th' 或任何东西,真的。

当您在图形程序中打开图像文件时,它知道将其解释为图像,知道哪些图案表示图像格式,哪些图案表示图像大小等等。

当您在文本编辑器中打开图像文件时,它会被视为文本。这是一种非常简单的格式,更接近计算机中的实际情况,但仍有一些解释正在进行。具体来说,几乎每个模式都被解释为一个特定的字符,一些像 AZ 一样正常,但也有一些奇怪的字符。一些模式不会显示为字符,而是被视为基本格式:换行符、制表符。

(情况因 Unicode 和文本编码(例如 UTF-8)而稍微复杂一些,但为了简单起见,我不会在此处处理这些内容。)

当您在文本编辑器中打开二进制文件时,请注意不要进行更改,因为您所做的几乎任何更改都会完全破坏文件内容的正常解释,也就是说,它会破坏文件并使其无法使用。