python 2.7编码解码

时间:2012-03-21 09:41:45

标签: python encoding compare

我遇到了涉及编码/解码的问题。 我从文件中读取文本并将其与数据库中的文本进行比较(Postgres) 比较在两个列表中完成

从文件我得到“jo \ x9a”为“još”和从数据库我得到“jo \ 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 ]

如何解决这个问题?比较这两个字符串时应该设置哪种编码来解决问题?

谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]