擅长:python、mysql、java
<p>当您调用<code>con.text()</code>时,这将返回一个<code>bytes</code>对象。对其调用<code>str()</code>将返回其<em>表示形式</em>的字符串-因此,如果不指定编码,则使用转义符而不是实际字符。(这意味着您的字符串最终包含<code>\\xe2\\x80\\x99</code>以及各种其他不需要的内容。)<code>bytes</code>基本上类似于Python 2中的<code>str</code>:它没有存储任何编码信息。<code>str</code>在Python 3中类似于Python 2中的<code>unicode</code>;它具有编码。所以,当把一个<code>bytes</code>对象转换成一个<code>str</code>对象时,你需要告诉它它实际上是用什么编码的。在这种情况下,就是<code>utf-8</code>。</p>
<p>与其在上面调用<code>str()</code>,不如使用<code>bytes.decode</code>;这是一样的,只是更整洁。</p>
<pre><code>>>> import urllib.request as u
>>> zipcode = 47401
>>> url = 'http://watchdog.net/us/?zip={}'.format(zipcode)
>>> con = u.urlopen(url)
>>> page = con.read().decode('utf-8')
>>> page[page.find("<title>") + 7:page.find("</title>") - 15]
'IN-09: Indiana’s 9th'
</code></pre>
<p>这里所做的唯一功能更改是将<code>bytes</code>对象解码为<code>'utf-8'</code>的规范。</p>