Python字符串比较 - 特殊/ Unicode字符的问题

时间:2011-03-08 06:00:01

标签: python string

我正在编写一个Python脚本来处理一些音乐数据。它应该通过比较它们的条目并匹配它们来合并两个独立的数据库。它几乎正常工作,但在比较包含特殊字符(即重音字母)的字符串时失败了。我很确定它是ASCII与Uni​​code编码问题,因为我收到错误:

“Unicode相等比较无法将两个参数都转换为Unicode - 将它们解释为不等”

我意识到我可以使用正则表达式来删除有问题的字符,但是我正在处理大量数据并且依赖正则表达式使我的程序变得非常慢。有没有办法让Python正确比较这些字符串?这里发生了什么 - 有没有办法判断它是否将我的字符串存储为ASCII或Unicode?

编辑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解码。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:0)

您可能需要预处理数据库并将所有内容转换为UTF-8。我的猜测是你在某些条目中有拉丁文1重音字符。

<小时/> 至于你的问题,唯一可以确定的方法是看。让你的脚本吐出那些不比较的脚本,然后查找字符代码。或者只是尝试string.decode('latin1').encode('utf8'),看看会发生什么。

答案 2 :(得分:0)

将两者都转换为unicode应该会有所帮助:

if unicode(str1) == unicode(str2):
    print "same" 

答案 3 :(得分:0)

要了解您(不是它)是否将字符串存储为str个对象或unicode个对象,print type(your_string)

您可以使用print repr(your_string)毫不含糊地向您自己(和我们)展示您的字符串中的内容。

顺便说一下,你在什么操作系统上使用的是什么版本的Python?如果是Python 3.x,请使用ascii()代替repr()