我还没有找到这个问题的答案;也许没有。但我对此感到好奇有一段时间了。

当您在文本编辑器中查看二进制文件时,到底是什么导致它显示为“乱码”?加密文件也是如此。文件的二进制值是否尝试转换为 ASCII?是否可以将视图转换为显示原始二进制值,即显示组成文件的 1 和 0?

最后,有没有办法确定哪个程序可以正确打开数据文件?很多时候,尤其是在 Windows 中,文件是孤立的或与特定程序无关。在文本编辑器中打开它有时会告诉您它所属的位置,但大多数时候由于乱码而无法告诉您。如果扩展程序不提供任何信息,您如何确定它属于哪个程序?

有帮助吗?

解决方案

  • 文件的二进制值是否尝试转换为 ASCII?

是的,这正是正在发生的事情。通常,文件的二进制值还包括不可打印的 ASCII 控制字符,导致在典型的文本编辑器中显示更加奇怪。

  • 是否可以将视图转换为显示原始二进制值,即显示组成文件的 1 和 0?

这取决于你的编辑。您想要的是“十六进制编辑器”,而不是普通的文本编辑器。这将向您显示文件的原始内容(通常以十六进制而不是二进制形式,因为零和一会占用大量空间并且更难以读取)。

  • 最后,有没有办法确定哪个程序可以正确打开数据文件?

Linux 有一个命令行程序叫 “文件” 它将尝试分析文件(通常寻找常见的标头模式)并告诉您它是什么类型的文件(例如文本、音频、视频或 XML 等)。我不确定是否有适用于 Windows 的等效程序。当然,这个程序的输出只是一个猜测,但是当您不知道文件的格式是什么时,它会非常有用。

其他提示

二进制文件显示为乱码,因为其中的数据是为机器读取而不是为人类设计的。可悲的是,我们中的一些人习惯于解释胡言乱语 - 尽管有一些专门的工具可以帮助更好地查看数据 - 但大多数人不应该知道。

文件中的每个字节都被视为当前代码集中的字符(可能是Windows上的CP1252)。例如,字节值65是'A';您可以在网上轻松找到说明性示例。因此,组成二进制数据的字节将根据代码集显示 - 与文本编辑器一样。它不会尝试转换二进制文件 - 它不知道如何(只有原始程序)。

至于如何检测创建文件的程序 - 有时你可能会这样做,但不容易和可靠。在Unix上(或在Windows上使用Cygwin),“文件”程序可能会有所帮助。该程序查看前几个字节来尝试猜测程序。

加密数据应该看起来像胡言乱语。如果它看起来不像胡言乱语,那么它的加密可能不是很好。

在标准文本编辑器(如记事本)中查看时,二进制文件显示为乱码的原因是因为当使用这些类型的应用程序常用的编码(例如UTF-8的ASCII)显示时,数据会映射到字符时它被编码用于显示,这个过程的输出通常对人类的意义不如映射的二进制数据,你看到的胡言乱语

如前所述,当以不同的方式查看时,这些文件更有意义,例如使用十六进制教程。

某些文件类型可以被给定类型的所有文件中的数据识别,例如所有可执行文件(* .exe)以字母MZ开头

显示看起来很有趣,因为二进制文件可以包含不可打印的字符。显示程序可以用其他东西替换这些字符。

使用十六进制编辑器可以防止这种情况。这样的程序将文件中的每个字节显示为十六进制值。这样可以获得文件的精确表格视图,但普通人破译这个视图并不容易,因为我们不习惯以这种方式查看数据。

有几种方法可以找出文件可能属于哪个程序。您可以查看文件的开头,并且根据某些知识,您可能会识别文件类型。有些类型以相同的字符开头(RAR,GIF等)。对于其他类型,它可能不那么容易。

在Linux中,您可以使用“文件”。用于帮助您确定文件类型的命令。 Windows可能会执行相同的程序。

二进制数据通常非常随机。根据定义,特别是加密数据。每个字节可以用256个字符之一表示(将Unicode排除在等式之外)。 ASCII仅涵盖其中的128个,其中只有94个是实际的可打印字符。在ASCII范围之外,您有许多国际字符和奇怪的符号。肯定有超过128个,因此必须指定一个代码页来选择一组特定的符号。

无论如何,由于二进制文件可以表示为一组非常随意的熟悉和不熟悉的字符,如果你在编辑器中打开文件,该文件看起来会像乱码一样。

你总是可以在十六进制编辑器中打开一个文件(二进制或文本文件,确实没有区别),然后查看原始二进制数据。

无法判断哪个程序创建了特定文件。特别是,如果程序已加密其数据,则所有希望都将丢失。否则,通常容易识别某些“签名”。

是的,Wordpad和Notepad以及许多其他文本编辑器假设您使用它打开的任何文件都是文本文件,并将尝试显示文件中字节所代表的ASCII字符。

Hex编辑器用于查看和编辑二进制文件。它们通常将每个字节显示为一对十六进制数字而不是“1和0”数字。因为这种方式更容易阅读。

除了字符编码之外,文本编辑器对进入它的数据做了很少的假设。因此,它(如你所说)将文件的数据读取为ASCII并以这种方式显示。由于二进制数据并不总是在字母数字范围内,因此您会感到胡言乱语。至于显示原始二进制值,您需要一个十六进制编辑器,如 XVI32

二进制文件通常没有使用它们的程序之外的上下文。一些二进制格式在开头包含一个4字节的魔术序列(例如,Java .class文件以“CAFE”开头),但是为了在没有程序的情况下识别它们,您需要映射这些4字节序列。我相信一些Linux发行版包含各种二进制格式的信息,并将检查文件的开头以尝试识别它。除此之外,你无能为力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top