擅长:python、mysql、java
<p>这里棘手的一点是,python3字符串是Unicode字符序列,这与ASCII字符序列不同。在</p>
<ul>
<li><p>在Python2中,<code>str</code>类型和<code>bytes</code>类型是同义词,并且有一个单独的类型<code>unicode</code>,它表示Unicode字符序列。如果你有一个字符串,这就有点神秘:它是字节序列,还是某个字符集中的字符序列?</p></li>
<li><p>在Python3中,<code>str</code>现在意味着<code>unicode</code>,我们用<code>bytes</code>来表示以前的<code>str</code>。给定一个字符串—一个Unicode字符序列,我们使用<code>encode</code>将其转换为可以表示它的某个字节序列,<em>如果</em>存在这样一个序列:</p>
<pre><code>>>> 'hello'.encode('ascii')
b'hello'
>>> 'sch\N{latin small letter o with diaeresis}n'
'schön'
>>> 'sch\N{latin small letter o with diaeresis}n'.encode('utf-8')
b'sch\xc3\xb6n'
</code></pre>
<p>但是:</p>
<pre><code>>>> 'sch\N{latin small letter o with diaeresis}n'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\xf6' in position 3: ordinal not in range(128)
</code></pre></li>
</ul>
<p>一旦有了<code>bytes</code>对象,就已经知道该怎么做了。在Python2中,如果有一个<code>str</code>,那么就有一个<code>bytes</code>对象;在Python3中,使用<code>.encode</code>和您选择的编码。在</p>