<p>“二进制文件如何工作”的问题太广泛,因为例如JPEG文件、MP3文件、可执行程序。。。是“二进制文件”。Heck,即使UTF-8文本文件是二进制文件,如果你认为“文本文件”只是一个人类可读的字节子集。<p>
<blockquote>
<p>If I understand it correctly, interpreter already converted all binaries it could into text</p>
</blockquote>
<p>您看到的是<code>bytes</code>对象的Python<code>repr()</code>;这不是原始内容。所有的<code>\x..</code>序列都是字节的Python转义序列,否则就无法表示为ASCII文本</p>
<p>瞧,表示与您打开并读取的文件中的表示不同</p>
<p>要查看同一二进制文件的另一种表示形式,您可能需要尝试在十六进制编辑器中打开它。下面是我在<code>xxd</code>十六进制转储程序中运行的任意PDF输出的开始:</p>
<pre><code>00000000: 2550 4446 2d31 2e33 0a25 c7ec 8fa2 0a38 %PDF-1.3.%.....8
00000010: 2030 206f 626a 0a3c 3c2f 4c65 6e67 7468 0 obj.<</Length
00000020: 2039 2030 2052 2f46 696c 7465 7220 2f46 9 0 R/Filter /F
00000030: 6c61 7465 4465 636f 6465 3e3e 0a73 7472 lateDecode>>.str
00000040: 6561 6d0a 789c cd5b 4fa8 1e57 1547 d445 eam.x..[O..W.G.E
00000050: 3f1e 2fbc d7b4 f4d5 68a7 a142 429b dbfb ?./.....h..BB...
00000060: 7fee d59d 6083 56a4 090f 41f9 68d1 bc24 ....`.V...A.h..$
00000070: 6d62 be9a 2fd6 18e8 52c5 9d20 e8b2 942a mb../...R.. ...*
</code></pre>
<p>左边是文件的十六进制偏移量,后面是文件中的十六进制字节,右边是可以表示为文本的字符表示(不能表示的是<code>.</code>)。您可以看到相同的<code>%PDF-...</code>头出现在那里,但没有<code>\xe2</code>等等,因为它们只是一个表示</p>
<p>至于PDF文件格式的规范,您可以在Adobe的网站上找到它(作为PDF…)<a href="https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf" rel="nofollow noreferrer">https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf</a></p>