2008-10-19 239 views
12

我还没有找到这个问题的答案;也许没有一个。但我一直在想这件事。究竟是什么原因导致二进制文件“乱码”?

究竟是什么原因导致二进制文件在文本编辑器中显示为“乱码”?加密文件是一样的。试图将文件的二进制值转换为ASCII码?是否可以将视图转换为显示原始二进制值,即显示组成文件的1和0?

最后,有没有办法确定什么程序将正确打开数据文件?很多时候,特别是在Windows中,文件是孤立的,或者与其他程序无关。在文本编辑器中打开它有时会告诉你它属于哪里,但大部分时间不会,由于乱码。如果扩展名不提供任何信息,您如何确定它属于哪个程序?

回答

16
  • 在文件试图被转换成ASCII码的二进制值?

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

  • 是否有可能转换的视图显示原始的二进制值,即 表明组成该文件的1和0?

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

  • 最后,有没有办法来确定哪些程序将正常开放 数据文件?

有一个叫"file" Linux命令行程序,将尝试分析文件(通常寻找常见头模式),并告诉你这是什么样的文件(例如文本或音频,或视频或XML等)。我不确定Windows是否有相应的程序。当然,这个程序的输出只是一个猜测,但是当你不知道文件的格式是什么时它可能非常有用。

+0

文件命令已移植到Windows;你可以在Cygwin上找到它。 – CesarB 2008-10-19 15:21:51

+0

无论如何`文件`肯定不是Linux程序 - 它是一个* nix程序,也可能在其他系统上。 Solaris已经有很多年了。 – 2008-11-25 02:42:31

2

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

这可以通过使用十六进制编辑器来防止。这样的程序将文件中的每个字节显示为其十六进制值。这为文件提供了一个很好的表格视图,但对于一般人来说,破解这个视图并不容易,因为我们不习惯以这种方式查看数据。

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

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

0

是的,写字板和记事本以及许多其他文本编辑器都假定您打开的任何文件都是文本文件,并且会尝试显示文件中字节表示的ASCII字符。

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

0

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

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

5

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

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

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

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

2

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

如前所述,当以不同的方式查看时,这些文件更有意义就像一个十六进制edutor一样。

某些文件类型可以存在于给定类型的所有文件数据进行识别,例如所有的可执行文件(* .exe)的以字母MZ

1

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

无论如何,由于二进制文件可以表示为一个非常随机的熟悉和陌生的字符分类,如果您在编辑器中打开它,该文件看起来就像是胡言乱语。

您可以随时在十六进制编辑器中打开一个文件(二进制或文本文件,实际上没有区别),并查看原始二进制数据。

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

相关问题