如何比较unicode类型与中文python中的str类型?

问题描述:

我使用python 2.7 例如:如何比较unicode类型与中文python中的str类型?

a = u'你好' 
b = '你好' 

我尝试下面的代码,但未能

print a.encode('UTF-8') == b #return False 

如何对它们进行比较平等?

+1

我得到了'真',你是怎么得到'假'的?只需反过来'b.decode('UTF-8')== a' –

+1

在python3中,我用''=='来比较''False',但是'True'。在python2中,您的确切示例输出“True”。 –

+0

倪好。当在IDLE中与此交互时,如果我尝试'a == b',我会得到一个'UnicodeWarning:Unicode等于比较无法将这两个参数转换为Unicode - 将它们解释为不等'消息。 – jockster

我希望您使用的是python3,这两个变量都是string,您不需要更改它们中的任何一个。简单地比较两者。

>>> a = u'你好' 
>>> b = '你好' 
>>> type(a) 
<class 'str'> 
>>> type(b) 
<class 'str'> 
>>> a == b 
True 

如果您使用python2您的尝试将工作。

很可能您的Python源文件不以UTF-8编码。变量b将包含这些引号之间的任何字节。这些字节将取决于编码。例如

# coding: utf-8 
print repr("你好") 

打印:'\xe4\xbd\xa0\xe5\xa5\xbd'

现在,如果我们保存源文件为GB2312和更新声明:

# coding: GB2312 
print repr("你好") 

打印:'\xc4\xe3\xba\xc3'

在任何情况下,如果有一个带有文本的字节数组,你也需要知道这些字节的编码,否则你不能可靠地解释它们。

如果你需要UTF-8字节而不管源文件的编码如何,你可以写u'你好'.encode('utf-8')将永远返回'\xe4\xbd\xa0\xe5\xa5\xbd'