擅长:python、mysql、java
<p>假设Python 2:</p>
<p>这是一个带Unicode转义符的字节字符串。为某些UTF-8编码的数据错误地生成了Unicode转义符:</p>
<pre><code>>>> s = "vinili-disponibili/311-canzoniere-del-lazio-lassa-st\u00c3\u00a0-la-me-creatura.html"
>>> s.decode('unicode-escape')
u'vinili-disponibili/311-canzoniere-del-lazio-lassa-st\xc3\xa0-la-me-creatura.html'
</code></pre>
<p>现在它是一个Unicode字符串,但是现在由于代码点类似于UTF-8字节而出现了错误解码。它将输出<code>latin1</code>(也叫<code>iso-8859-1</code>)编解码器将前256个代码点直接映射到字节0-255,因此使用以下技巧将其转换回字节字符串:</p>
^{pr2}$
<p>现在可以正确解码为UTF-8:</p>
<pre><code>>>> s.decode('unicode-escape').encode('latin1').decode('utf8')
u'vinili-disponibili/311-canzoniere-del-lazio-lassa-st\xe0-la-me-creatura.html'
</code></pre>
<p>它是一个Unicode字符串,因此Python显示它的<code>repr()</code>值,它将U+007F以上的代码点显示为转义代码。<code>print</code>如果终端正确配置了支持打印字符的编码,则可以查看实际值:</p>
<pre><code>>>> print(s.decode('unicode-escape').encode('latin1').decode('utf8'))
vinili-disponibili/311-canzoniere-del-lazio-lassa-stà-la-me-creatura.html
</code></pre>
<p>理想情况下,首先解决错误地生成此字符串的问题,而不是解决混乱的问题。在</p>