擅长:python、mysql、java
<p>您传入的是一个原始的Unicode字符串,在该字符串中,您应该以UTF-8字节序列的形式传入该字符串。你甚至把它标为UTF-8!这意味着你可能想了解一下两者之间的差异。在</p>
<p>改变</p>
<pre><code>'%s'%eva
</code></pre>
<p>到</p>
^{pr2}$
<p>要了解更多背景,可以阅读<a href="https://www.unicode.org/faq/utf_bom.html#UTF8" rel="nofollow noreferrer">https://www.unicode.org/faq/utf_bom.html#UTF8</a>和/或<a href="https://nedbatchelder.com/text/unipain.html" rel="nofollow noreferrer">https://nedbatchelder.com/text/unipain.html</a></p>
<p>构造<code>'%s'%string</code>只是说<code>string</code>的一种丑陋和不规则的方式,但这里实际上是一个错误:<code>'%s'%string.encode('utf-8')</code>生成一个字节字符串,然后将其插入到Unicode字符串中,这会产生完全错误的结果。注意:</p>
<pre><code>>>> eva = '日报'
>>> eva.encode('utf-8') # correct
b'\xe6\x97\xa5\xe6\x8a\xa5'
>>> '%s'%eva.encode('utf-8') # incorrect
"b'\\xe6\\x97\\xa5\\xe6\\x8a\\xa5'"
>>> b'%s'%eva.encode('utf-8') # correct but terribly fugly
b'\xe6\x97\xa5\xe6\x8a\xa5'
</code></pre>
<p>请注意<code>'%s'%eva.encode('utf-8')</code>如何获取编码的字节字符串并将其转换为Unicode表示。注释掉的行显示您尝试了<code>eva = eva.encode('utf-8')</code>,但是由于在Unicode字符串中不必要的<code>%</code>插值,结果显然是错误的。在</p>