【发布时间】:2011-03-08 06:00:00
【问题描述】:
我正在编写一个 Python 脚本来处理一些音乐数据。它应该通过比较它们的条目并匹配它们来合并两个独立的数据库。它几乎可以工作,但在比较包含特殊字符(即重音字母)的字符串时失败。我很确定这是 ASCII 与 Unicode 编码问题,因为我得到了错误:
“Unicode 相等比较未能将两个参数转换为 Unicode - 将它们解释为不相等”
我意识到我可以使用正则表达式来删除有问题的字符,但是我正在处理大量数据并且过度依赖正则表达式会使我的程序变得非常缓慢。有没有办法让 Python 正确比较这些字符串?这是怎么回事——有没有办法判断它是将我的字符串存储为 ASCII 还是 Unicode?p>
编辑 1:我使用的是 Python v2.6.6。检查类型后,我发现一个数据库向我吐出 Unicode 字符串,而一个数据库给出 ASCII。所以这可能就是问题所在。我正在尝试将第二个数据库中的 ASCII 字符串转换为 Unicode,其中包含类似
的行line = unicode(f.readline().decode(latin_1).encode(utf_8))
但这会产生如下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 41: ordinal not in range(128)
我不确定为什么 'ascii' 编解码器会抱怨,因为我正在尝试从 ASCII 解码 。有人可以帮忙吗?
【问题讨论】:
-
“使用正则表达式删除有问题的字符”:在你知道有问题的字符是什么以及它们为什么有问题之前是不可能的,并且删除不方便的数据通常不是一个好主意。该解决方案更有可能使用正确的编码解码您的
str对象。