如何在Python中比较这两个字符串?

时间:2015-07-29 14:54:30

标签: python string unicode

我有一个包含以下两个字符串的文件:

25_%D1%80%D0%B0%D1%88%D3%99%D0%B0%D1%80%D0%B0
25_\xD1\x80\xD0\xB0\xD1\x88\xD3\x99\xD0\xB0\xD1\x80\xD0\xB0

它们都代表相同的URL路径,因此应该相同。我想对它们两者应用相同的“清洁功能”,获得相同的字符串。

从文件中读取这些字符串后我有:

>> s0
'25_%D1%80%D0%B0%D1%88%D3%99%D0%B0%D1%80%D0%B0'
>> s1
'2_\\xD1\\x80\\xD0\\xB0\\xD1\\x88\\xD3\\x99\\xD0\\xB0\\xD1\\x80\\xD0\\xB0'

(请注意s1中的转义反斜杠)。如果我取消引用s0,我会得到以下内容:

>> import urllib
>> t0 = urllib.unquote(s0)
'25_\xd1\x80\xd0\xb0\xd1\x88\xd3\x99\xd0\xb0\xd1\x80\xd0\xb0'
>> print t0
25_рашәара

这很好。但是,我在s1上唯一知道的事情如下:

>> t1 = s1.decode("unicode_escape")
u'2_\xd1\x80\xd0\xb0\xd1\x88\xd3\x99\xd0\xb0\xd1\x80\xd0\xb0'
>> print t1
2_ÑаÑÓаÑ

看起来很破碎。我的问题是:可以编写clean(s)函数来规范化这两个字符串,因此它们既可以是<type 'str'>,也可以是<type 'unicode'>,并且两者都是相同的(也可以同等比较)?

1 个答案:

答案 0 :(得分:2)

考虑:

>>> s0 = '25_%D1%80%D0%B0%D1%88%D3%99%D0%B0%D1%80%D0%B0'
>>> s1 = '25_\\xD1\\x80\\xD0\\xB0\\xD1\\x88\\xD3\\x99\\xD0\\xB0\\xD1\\x80\\xD0\\xB0'
>>> import urllib
>>> t0 = urllib.unquote(s0).decode('utf8')
>>> t1 = s1.decode('string_escape').decode('utf8')
>>> print t0
25_рашәара
>>> print t1
25_рашәара
>>> t0 == t1
True
>>>