У меня есть файл со следующими двумя строками:Как сравнить эти две строки в Python?
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'>
, и оба печатают одинаково (и сравнивают одинаково также)?
Это работает! Я действительно пробовал 's1.decode ('unicode_escape')', который не работал. Не могли бы вы дать мне быстрый указатель относительно разницы между 'string_escape' и' unicode_escape'? – gdiazc
@Gonzalo: string_escape для строк, unicode_escape для юникодов;) – georg