2012-03-21 126 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