如何在中文python中比较unicode类型和str类型?
我正在使用python 2.7 例如:如何在中文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'> >
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-将它们解释为不相等的消息。@python3u'str'
和'str'
中的M.T.都会生成Unicode,因此a==b
。以后什么都不用做。在python2中,您需要对Python3进行编码/解码.encode
将给出一个bytes
对象,与str
对象相比,该对象的计算结果为False
。在Python3中,u“something”
将是str
类型。。。Python 3中没有unicode
类型。