2012-03-21 122 views
4

我有一個涉及編碼/解碼的問題。 我從文件中讀取文本,並將其與文本從數據庫(Postgres的) 比較從文件兩份名單python 2.7編碼解碼

內完成,我得到「喬\ x9a」爲「喬斯」,並從數據庫中,我得到「喬\ XC5 \比較xa1「爲相同的值

common = [a for a in codes_from_file if a in kode_prfoksov] 

# Items in one but not the other 
only1 = [a for a in codes_from_file if not a in kode_prfoksov] 

#Items only in another 
only2 = [a for a in kode_prfoksov if not a in codes_from_file ] 

如何解決這個問題?比較這兩個字符串以解決問題時應該設置哪種編碼?

謝謝

回答

4

您的文件字符串似乎是Windows-1250編碼。您的數據庫似乎包含UTF-8字符串。

因此你可以首先將所有字符串轉換爲Unicode:

codes_from_file = [a.decode("windows-1250") for a in codes_from_file] 
kode_prfoksov] = [a.decode("utf-8") for a in codes_from_file] 

,或者如果你不想Unicode字符串,只需將文件字符串轉換爲UTF-8:

codes_from_file = [a.decode("windows-1250").encode("utf-8") for a in codes_from_file] 
+0

OP來自斯洛文尼亞,所以Windows-1250比Windows-1252更安全。 – 2012-03-21 10:03:11

+0

@TadeuszA.Kadłubowski好的,謝謝。編輯。 – jofel 2012-03-21 10:04:23

4

第一個似乎是windows-1250,第二是utf-8

>>> print 'jo\x9a'.decode('windows-1250') 
još 
>>> print 'jo\xc5\xa1'.decode('utf-8') 
još 
>>> 'jo\x9a'.decode('windows-1250') == 'jo\xc5\xa1'.decode('utf-8') 
True 
+0

謝謝它工作 – Yebach 2012-03-21 12:12:30