2016-01-01 2 views
-1

Я написал простое заявление, что делает что-то, когда я беру строку из некоторого источника HTML, но когда я пишу:Python не может найти символ

if 'p\xd1\x83\xd0\xb1.' in item: 
#other code 

код в если Безразлично» t запустить.

Вот как я беру источник:

source=urlopen(link).read().decode('utf-8') 

P.S. Я разделил источник в списке строки, то я цикл через него .. пункт часть всего источника HTML

EDIT: в моем случае пункта somethig как:

<p> руб.230 </p> 
+3

А что такое 'item'? Покажите нам «элемент», для которого вы ожидаете выполнения инструкции 'if'. Кажется, я знаю, в чем твоя проблема, но я не буду отвечать, пока не буду уверен. – timgeb

+0

отредактирован ... Неясно, извините – Malloc

+1

вы можете предоставить распечатку примера 'item', где вы ожидаете его работы, и он не работает? –

ответ

2

p\xd1\x83\xd0\xb1. является строкой байтов. Декодирование как UTF-8, то преобразовать строку байтов в строку символов Юникода:

>>> 'p\xd1\x83\xd0\xb1.'.decode('utf-8') 
u'p\u0443\u0431.' 
>>> print u'p\u0443\u0431.' 
pуб. 

Они не то же самое. Если вы хотите, чтобы проверить наличие подстроки в списке, либо рассматривать HTML как байты и не decode, или декодировать его и проверить, если символы Unicode являются подстрока:

if u'p\u0443\u0431.' in text: 
    ... 

Или еще читаемо:

if u'руб.' in text: 
    ... 

Вам может понадобиться объявить кодировку в верхней части вашего скрипта Python, если вы включите символы Юникода в вашем источнике:

# -*- coding: utf-8 -*- 

A lso, что латинский p, вероятно, должен быть кириллицей р. Оба выглядят одинаково, но все они разные.

+0

Вы решили мою проблему ... спасибо – Malloc

Смежные вопросы