Python 2.7 编码解码

5

我有一个关于编码/解码的问题。

我从文件中读取文本,将其与数据库(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个回答

5
第一个似乎是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

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]

OP来自斯洛文尼亚,因此Windows-1250比Windows-1252更安全。 - Tadeusz A. Kadłubowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接