2017-02-15 362 views
1

我使用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

回答

1

我希望您使用的是python3,這兩個變量都是string,您不需要更改它們中的任何一個。簡單地比較兩者。

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

如果您使用python2您的嘗試將工作。

1

很可能您的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'