>>> str1 = unicode('María','utf8')
>>> str2 = u'María'.encode('utf8')
>>> str1 == str2
False
这怎么可能?
以防万一,我使用的是 iPython Notebook。
你有一个unicode字符串和一个字节字符串。它们不是同一件事。
一个持有 Unicode 值,María
. 另一个保存 UTF-8 编码的字节序列,'Mar\xc3\xada'
.
在比较 Unicode 和字节字符串值时,Python 2 确实会进行隐式转换,但您不应该指望这种转换,它完全取决于为您的系统设置的默认编解码器。
如果您还不知道 Unicode 到底是什么,或者为什么 UTF-8 不是一回事,或者想了解有关编码的任何其他信息,请参阅:
每个软件开发人员绝对、绝对必须了解 Unicode 和字符集(没有任何借口!)作者:Joel Spolsky
Python Unicode HOWTO
Ned Batchelder 的实用 Unicode
字符串不能同时是“Unicode”和“UTF-8 编码”;它们是相互排斥的。因此,不同的字符串。