为什么使用文本编辑器打开二进制文件时看不到二进制代码?例如,当我使用文本编辑器打开图像时,我会看到一些奇怪的字符以及一些人类可读的字符;但该图像应该是二进制编码的。
答案1
二进制和文本数据没有被分开:它们只是数据。这取决于对它们的解释。如果你在文本编辑器中打开二进制数据(例如图像文件),其中大部分内容都没有意义,因为它不符合你选择的解释(作为文本)。
你叫什么文本是子集可能的文件内容:给定的字符集转换为可读的字符。
例如,在ASCII,你可以看到,在 128 个“允许”的值中,只有大约一半是字母和数字,30 个是标点符号,其余的是控制字符。后一组在文本文件中使用不多,而且它们没有很好的文本表示。其中一些是标签和新队字符,文本编辑器需要发挥创造力来显示它们。
一些文本编辑器有选项可以明确显示空格。然后它们实际上会被绘制为字符,除了常规的格式化行为(这也只是解释这些字符)。
纯 ASCII 仅解释 128 个值。用于存储此信息的字节每个都有 256 个可能的值,因此一半的可能值在 ASCII 中是不允许的。例如,这些值用于特定于区域的字符集(如 Latin 1),但在 ASCII 中,它们是未定义的。它们在只能处理 ASCII 的文本查看器中没有有用的表示。
二进制数据通常不被解释为文本。因此在这些文件中,所有可能的字节值很常见。其他一切都是浪费(这就是你可以很好地压缩文本的原因)。图像文件格式很复杂,你通常不会将它们视为文本,因此它们不需要可读。
由于没有通用的数据解释(字符集)将所有可能的值映射到可读字符,而且因为这无论如何都没有多大意义(因为它不是可读的文本),所以主要部分都显示为乱码。
十六进制编辑器为数据选择不同的表示形式:它将每个字节显示为两个十六进制数字。这只是一种不同的表示方法,并且具有易于人类阅读的字符集:所有 256 个可能的字节值都可以表示为两个十六进制数字。
由于二进制数据与十六进制数据之间的映射十分简单,反之亦然(4 个二进制数字与 1 个十六进制数字之间的映射),而且二进制每个数字包含的信息非常少,因此十六进制通常是人类读取二进制的首选方式,除非有特殊原因需要采用其他表示形式。
有些文本编辑器可能有十六进制编辑器模式还有一些启发式方法试图确定文件是文本还是二进制,并自动选择其中一种模式。但这可能很难做到正确,而且文件的特定属性并不能说明它是这种类型还是那种类型。
有些 FTP 客户端会要求您指定文件扩展名文本数据然后,这些程序将更改文件内容以匹配您所连接的机器的操作系统,因为 Windows 使用的行尾字符序列 ( CR/LF
) 与 Linux 和 Unix(包括 Mac OS X;LF
)不同。
答案2
因为你打开的是文本编辑,不是一个二进制编辑。
答案3
这一切都与背景和解释有关。计算机中的高低电压模式或磁盘的磁化区域只有当我们决定如何解释它们时才有意义。
在不同情况下,低-高-低-低-低-低-低-低-高这种模式可能意味着数字 65、大写字母“A”、天蓝色、顾客点了咖啡、日期“3 月 6 日”或任何其他意思。
当您在图形程序中打开图像文件时,它知道将其解释为图像,知道哪些模式表示图像格式,哪些模式表示图像大小等等。
当您在文本编辑器中打开图像文件时,它会被视为文本。这是一种非常简单的格式,更接近计算机中实际发生的事情,但仍需要进行一些解释。具体来说,几乎每个模式都会被解释为特定字符,有些是正常的字符,如 AZ,但也有一些奇怪的字符。一些模式不会显示为字符,而是被视为基本格式:换行符、制表符。
(由于 Unicode 和文本编码(例如 UTF-8)等原因,情况稍微复杂一些,但为了简单起见,在这里我不会处理这些内容。)
当您在文本编辑器中打开二进制文件时,请注意不要进行更改,因为几乎任何更改都会完全破坏文件内容的正常解释,也就是说,它会破坏文件并使其无法使用。
答案4
编辑器不够智能,无法判断某些文本是否有意义,因此它会将任何文件显示为文本,除非明确告知要这样做(如果它具有此功能)。正如其他人指出的那样,某些编辑器具有显示十六进制的功能。