2015-10-19 91 views
0

這個話題已經在計算器上,但我沒有找到任何令人滿意的解決方案:的Python 2:比較一個Unicode和STR

我必須以Unicode字符串一些來自服務器和我在一些硬編碼字符串代碼,我想匹配。而且我也明白爲什麼我不能只製作一個==,但我沒有成功地將它們轉換成正確的(我不關心我是否要做str - > unicode或unicode - > str)。

我試過encodedecode但它沒有給出任何結果。

這是我收到...

fromServer = {unicode} u'Führerschein nötig' 
fromCode = {str} 'Führerschein nötig' 

(你可以看到,它是德國!)

如何可以讓他們在Python 等於?

+3

爲什麼不在unicode中對代碼進行硬編碼? 'fromCode =u'Führerscheinnötig''而不是'fromCode ='Führerscheinnötig''? – colidyre

+0

哈哈哈,是啊當然,這不是壞的,是一個解決方案,當然....:DD –

回答

-1
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.... 
+1

是,我得到'本地=標準[「關鍵」]編碼(「UTF-8」) 的UnicodeDecodeError:「ASCII '編解碼器不能在14位解碼字節0xc3:在範圍序數不(128)' –

+0

@LaurentMeyer嘗試比較 'Führerscheinnötig'.decode(' 的Latin-1')和u'Führerscheinnötig」 – LetzerWille

+0

爲什麼它工作時downvote並解決OP問題? – LetzerWille

2

首先確保您在文件頂部聲明瞭Python源文件的編碼。例如。如果您的文件編碼爲拉丁文1:

# -*- coding: latin-1 -*- 

第二,總存儲文本爲Unicode字符串:

fromCode = u'Führerschein nötig' 

如果你從某個字節,將它們轉換與str.decode爲Unicode與工作前,文本。對於文本文件,打開文件時指定編碼,例如:該字節串用Unicode字符串比較會失敗隨機的,根據系統設置,或任何編碼恰好是用於文本

# use codecs.open to open a text file 
f = codecs.open('unicode.rst', encoding='utf-8') 

代碼文件。不要依賴它,總是要確保比較兩個unicode字符串或兩個字節字符串。

Python 3改變了這種行爲,它不會嘗試轉換任何字符串。 'a'b'a'被視爲不同類型的對象,並將它們進行比較將始終返回False

+0

我稍後再測試,謝謝! –