擅长:python、mysql、java
<p>在python2中,<code>str</code>和<code>bytes</code>是同一件事,因此当您编写<code>'\xff'</code>时,结果包含实际的字节<code>0xFF</code>。你知道吗</p>
<p>在python3中,<code>str</code>更接近python2的<code>unicode</code>对象,而不是<code>bytes</code>的别名。<code>\xff</code>不再是插入字节的请求,而是插入Unicode字符的请求,该字符的代码可以用8位表示。该字符串使用默认编码(可能是UTF-8)打印,其中字符0xFF被编码为字节<code>\xc3\xbf</code>。<code>\x</code>基本上是以字符串形式出现的<code>\u</code>的单字节版本。不过,当它出现在<code>bytes</code>中时,还是和以前一样。你知道吗</p>
<p>现在来看看解决办法。如果你只是想要一些字节,那么就做吧</p>
<pre><code>b'\xff'
</code></pre>
<p>这与python2中的工作原理相同。可以将这些字节写入二进制文件,但不能直接打印,因为打印的所有内容都转换为<code>str</code>。打印的问题是所有内容都以文本模式编码。幸运的是,<a href="https://docs.python.org/3/library/sys.html#sys.stdout" rel="nofollow noreferrer">^{<cd14>}</a>有一个<code>buffer</code>属性,允许您直接输出<code>bytes</code>:</p>
<pre><code>sys.stdout.buffer.write(b'\xff\n')
</code></pre>
<p>只有当您不使用没有<code>buffer</code>的花哨的东西来替换<code>sys.stdout</code>时,这才有效。你知道吗</p>