擅长:python、mysql、java
<p>您正在尝试将字节字符串(<code>'MyString'</code>)与Unicode代码点字符串(<code>u'MyString'</code>)进行比较。这是一个“苹果和橘子”的比较。不幸的是,Python2在某些情况下假装这种比较是有效的,而不是总是返回<code>False</code>:</p>
<pre><code>>>> u'MyString' == 'MyString' # in my opinion should be False
True
</code></pre>
<p>作为设计师/开发人员,您可以决定应该进行什么样的正确比较。以下是一种可能的方法:</p>
<pre><code>a = u'MyString'
b = 'MyString'
a.encode('UTF-8') == b # True
</code></pre>
<p>我建议使用上述方法而不是<code>a == b.decode('UTF-8')</code>,因为所有<code>u''</code>样式的字符串都可以用UTF-8编码成字节,除非在某些奇怪的情况下,但并非所有字节字符串都可以用这种方式解码为Unicode。</p>
<p>但是,如果您选择在比较之前对Unicode字符串进行UTF-8编码,那么在Windows系统上这样做会失败:<code>u'Em dashes\u2014are cool'.encode('UTF-8') == 'Em dashes\x97are cool'</code>。但如果你<code>.encode('Windows-1252')</code>取而代之,它会成功的。这就是为什么它是苹果和橘子的比较。</p>