[英]Python 2: Comparing a unicode and a str
這個話題已經在StackOverflow上了,但是我沒有找到令人滿意的解決方案:
我有一些來自服務器的Unicode字符串,並且我想匹配一些硬編碼的字符串。 而且我知道為什么我不能只做一個==
但是我沒有成功地正確轉換它們(我不在乎我是否必須執行str-> unicode或unicode-> str)。
我嘗試encode
和decode
,但未得到任何結果。
這是我收到的...
fromServer = {unicode} u'Führerschein nötig'
fromCode = {str} 'Führerschein nötig'
(如您所見,它是德語!)
在Python 2中如何讓它們相等?
首先,請確保在文件頂部聲明Python源文件的編碼。 例如。 如果您的文件編碼為latin-1:
# -*- coding: latin-1 -*-
其次,始終將文本存儲為Unicode字符串:
fromCode = u'Führerschein nötig'
如果從某處獲取字節, str.decode
在處理文本之前使用str.decode
將其轉換為Unicode。 對於文本文件,在打開文件時指定編碼,例如:
# use codecs.open to open a text file
f = codecs.open('unicode.rst', encoding='utf-8')
將字節字符串與Unicode字符串進行比較的代碼通常會隨機失敗,具體取決於系統設置或文本文件使用的任何編碼。 不要依賴它,始終確保您比較兩個unicode字符串或兩個字節字符串。
Python 3更改了此行為,它將不會嘗試轉換任何字符串。 'a'
和b'a'
被認為是不同類型的對象,比較它們將始終返回False
。
tested on 2.7
for German umlauts latin-1 is used.
if 'Führerschein nötig'.decode('latin-1') == u'Führerschein nötig':
print('yes....')
yes....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.