擅长:python、mysql、java
<blockquote>
<p>I have the following string: <code>u'\xe4\xe7\xec\xf7 \xe4\xf9\xec\xe9\xf9\xe9'</code> encoded in <code>windows-1255</code></p>
</blockquote>
<p>这是自相矛盾的。<code>u</code>表示它是Unicode字符串。但是如果你说它是以任何方式编码的,那么它必须是字节字符串(因为Unicode字符串只能被编码成字节字符串)。在</p>
<p>事实上-你的给定实体-<code>\xe4\xe7</code>等-代表每个字节,并且只有通过给定的编码,<code>windows-1255</code>它们才被赋予各自的含义。在</p>
<p>换句话说,如果你有一个<code>u'\xe4'</code>,你可以确保它与<code>u'\u00e4'</code>相同,而不是{<cd6>},否则就是这样。在</p>
<p>如果您碰巧从一个不知道这个问题的源代码中获得了错误的Unicode字符串,那么您可以从中派生出您真正需要的字节字符串:借助“1:1编码”,即拉丁1。在</p>
<p>所以</p>
<pre><code>correct_str = u_str.encode("latin1")
# now every byte of the correct_str corresponds to the respective code point in the 0x80..0xFF range
correct_u_str = correct_str.decode("windows-1255")
</code></pre>