我遇到了涉及编码/解码的问题。 我从文件中读取文本并将其与数据库中的文本进行比较(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 ]
如何解决这个问题?比较这两个字符串时应该设置哪种编码来解决问题?
谢谢
答案 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]