簡體   English   中英

Python 2:比較unicode和str

[英]Python 2: Comparing a unicode and a str

這個話題已經在StackOverflow上了,但是我沒有找到令人滿意的解決方案:

我有一些來自服務器的Unicode字符串,並且我想匹配一些硬編碼的字符串。 而且我知道為什么我不能只做一個==但是我沒有成功地正確轉換它們(我不在乎我是否必須執行str-> unicode或unicode-> str)。

我嘗試encodedecode ,但未得到任何結果。

這是我收到的...

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM