擅长:python、mysql、java
<p>是的,直到3.1 <code>struct.pack()</code>错误地将字符串隐式编码为UTF-8字节;这在Python 3.2中得到了修复。见<a href="http://bugs.python.org/issue10783">issue 10783</a>。</p>
<p>结论是,隐式转换是一个坏主意,当开发人员仍有机会这样做时,它被还原:</p>
<blockquote>
<p>I prefer to break the API today than having to maintain a broken API for
10 or 20 years :-) And we have a very small user base using Python 3,
it's easier to change it now, than in the next release.</p>
</blockquote>
<p>这也记录在<a href="http://docs.python.org/3/whatsnew/3.2.html#porting-to-python-3-2">porting section of the 3.2 What's New guide</a>:</p>
<blockquote>
<p><code>struct.pack()</code> now only allows bytes for the <code>s</code> string pack code. Formerly, it would accept text arguments and implicitly encode them to bytes using UTF-8. This was problematic because it made assumptions about the correct encoding and because a variable-length encoding can fail when writing to fixed length segment of a structure.</p>
</blockquote>
<p>打包之前需要显式地对字符串进行编码。</p>