为什么二进制文件内容是乱码
不知道大家有没有一个经验,就是忍不住好奇想打开二进制文件(就是 .exe, .gif, .docx, .xlsb… 等一系列不是明文 plaintext 的文件)一探究竟。结果打开一看都是乱码。那么这篇文章将会满足你的好奇心,并附上正确开启方式哦!
本文参考资料来自 Stack Overflow 帖子 What exactly causes binary file “gibberish”? 的高赞回答。如有错误,请发送您的观点到我的邮箱中,我会对文章进行更新。
当然,我还通过 ChatGPT 去了解相关资料,以下是对话内容(仅供参考)。
ChatGPT Conversation Record
Why the content of binary files look so gibberish while using text editor to open it?
二进制文件中的内容在文本编辑器中看起来像乱码,是因为文本编辑器尝试解释二进制数据为文本,导致显示不可读的字符。二进制文件包含非文本的二进制数据,不应以文本方式打开。
Can you explain what exactly the text editor done while opening the binary files?
文本编辑器在打开二进制文件时会尝试将文件内容解释为文本字符集。它通常使用特定的字符编码(如ASCII或UTF-8)来解释字节并显示对应的字符。由于二进制文件包含各种非文本数据,这样的解释会导致不可读的字符显示,因此内容看起来像乱码。实际上,二进制文件可能包含字节序列,代表图像、音频、程序代码等,而这些内容在文本编辑器中以文本形式展示并不合适。
Can you show me the original content of a binary file?
抱歉,由于文本界面的限制,我无法直接显示二进制文件的原始内容。二进制文件通常包含不可打印的字符和二进制数据,无法在文本格式中直接呈现。如果您需要查看二进制文件的内容,您可能需要使用专门的二进制文件查看器或编辑器。
just show the code in binary format?
Certainly, here’s an example of binary code:
01001000 01100101 01101100 01101100 01101111 00101100 00100000 01110111 01101111 01110010 01101100 01100100 00100001 |
This is a simple greeting, “Hello, world!” represented in binary. Each group of 8 bits corresponds to a character based on ASCII encoding.
So why these code become unreadable code when it is open by text editor? Can you show it step by step?
Certainly, let’s break down the binary code “01001000 01100101 01101100 01101100 01101111 00101100 00100000 01110111 01101111 01110010 01101100 01100100 00100001” step by step:
Original Binary Code:
01001000 01100101 01101100 01101100 01101111 00101100 00100000 01110111 01101111 01110010 01101100 01100100 00100001
ASCII Conversion:
H e l l o , w o r l d !
When you open a binary file in a text editor, it attempts to interpret these binary sequences as character encodings like ASCII. In this case, the binary code represents ASCII characters, and the text editor displays the corresponding characters (“Hello, world!”). However, not all binary files follow character encodings, leading to unreadable characters or gibberish when opened in a text editor.
Is it possible to convert the view to display raw binary values?
在大多数文本编辑器中,你通常无法直接以原始二进制值的形式查看文件内容。文本编辑器主要设计用于显示和编辑文本数据,而不是二进制数据。
要以原始二进制形式查看文件内容,你可能需要使用专门的二进制文件查看器或编辑器。这些工具允许你以字节或位为单位查看文件,而不会将其解释为字符。你可以尝试使用诸如Hex编辑器之类的工具,这样你就能够以更底层的方式查看文件的二进制表示。
我们将对这个话题进行以下探究:
为什么使用文本编辑器打开二进制文件的内容是乱码
要解释这个问题,首先得了解一个概念 文本编辑器是为了显示文本。所以文本编辑器将二进制文件的内容解释为文本格式,而不是二进制格式。二进制文件包含的数据是为计算机而非人类设计的,因此不适合用文本编辑器打开[1]。
通常使用特定的字符编码(如 ASCII 或 UTF-8)来解释字节并显示对应的字符。由于二进制文件包含各种非文本数据,这样的解释会导致不可读的字符显示,因此内容看起来像乱码。实际上,二进制文件可能包含字节序列,代表图像、音频、程序代码等,而这些内容在文本编辑器中以文本形式展示并不合适。
有没有办法以可读的方式打开二进制文件
想要直接打开二进制文件(以显示其中的 0 和 1)是不可取的,因为这样会显示整个代码难以阅读,毫无意义。所以要想打开二进制文件,可以使用十六进制编辑器 Hex Editor。它可以显示二进制文件的原始内容,而不是将其解释为文本格式。
十六进制编辑器是一种特殊的编辑器,它可以将二进制文件的内容以十六进制格式显示出来。十六进制是一种数字表示法,它使用16个数字(0-9和A-F)来表示数据。每个数字对应于二进制数据的4个位。因此,十六进制编辑器可以将二进制数据转换为易于阅读的格式,以便您可以更轻松地查看和编辑数据[2]。
有没有办法通过二进制文件确定该文件属于什么类型
在确定数据文件类型的过程中,可以使用类似于 Linux 中的命令行程序 file
的工具。该程序尝试分析文件(通常查找常见的文件头模式),并告诉你文件的类型(如文本、音频、视频、XML等)。虽然这个程序的输出只是一个猜测,但在不了解文件格式的情况下,它可以非常有用。在 Windows 平台是否有类似的程序尚不确定。
Windows 种已经将 file
指令进行移植,我们可以在 Cygwin 中找到其实例。其中一个很好的 file
移植功能可以在 sourceforge 中找到[3]
其他回答
A binary file appears as gibberish because the data in it is designed for the machine to read and not for humans. Sadly, some of us get used to interpreting gibberish - albeit with somewhat specialized tools to help see the data better - but most people should not need to know.
Each byte in the file is treated as a character in the current code set (probably CP1252 on Windows). Byte value 65 is ‘A’, for example; you can find illustrative examples easily on the web. So, the bytes that make up the binary data are displayed according to the code set - as best as the text editor can. It doesn’t try to convert the binary - it doesn’t know how (only the original program does).
As to how to detect what program created the file - you may be able to do that sometimes, but not easily and reliably. On Unix (or with Cygwin on Windows) the ‘file’ program may be able to help. This program looks at the first few bytes to try and guess the program.
Encrypted data is supposed to look like gibberish. If it doesn’t look like gibberish, then it probably isn’t very well encrypted[4].
以上回答版权信息为 CC BY-SA 2.5,原文已标注在 参考资料中。
参考资料
- 1.What is the difference between binary and text files? ↩
- 2.What is a Hex Editor and How to Use It? ↩
- 3.The (well, one) Windows port of
file
is here ↩ - 4.What exactly causes binary file "gibberish"? Answered by Jonathan Leffler ↩