如何在中文python中比较unicode类型和str类型?

如何在中文python中比较unicode类型和str类型?,python,unicode,Python,Unicode,我正在使用python 2.7 例如: a = u'你好' b = '你好' 我尝试了以下代码,但失败了 print a.encode('UTF-8') == b #return False 如何将它们进行相等的比较?我希望您使用的是python3,这两个变量都是string,您无需更改其中任何一个。简单地比较两者 >>> a = u'你好' >>> b = '你好' >>> type(a) <class 'str'> >

我正在使用python 2.7 例如:

a = u'你好'
b = '你好'
我尝试了以下代码,但失败了

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

如何将它们进行相等的比较?

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

>>> a = u'你好'
>>> b = '你好'
>>> type(a)
<class 'str'>
>>> type(b)
<class 'str'>
>>> a == b
True
>a=u'你好'
>>>b='你好'
>>>类型(a)
>>>类型(b)
>>>a==b
真的

如果您使用的是
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'

我得到了
True
,你是如何得到
False的??在python3中,我用你的精确代码得到了
False
,但是在做简单的比较
a==b
时得到了
True
。在python2中,您的确切示例输出
True
.Ni hao。在空闲状态下与此进行交互时,如果我尝试
a==b
,我会得到一个
UnicodeWarning:Unicode相等比较无法将两个参数转换为Unicode-将它们解释为不相等的
消息。@python3
u'str'
'str'
中的M.T.都会生成Unicode,因此
a==b
。以后什么都不用做。在python2中,您需要对Python3进行编码/解码
.encode
将给出一个
bytes
对象,与
str
对象相比,该对象的计算结果为
False
。在Python3中,
u“something”
将是
str
类型。。。Python 3中没有
unicode
类型。