Я написал простой оператор, который что-то делает, когда я беру строку из некоторого источника html, но когда я пишу:

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

код в , если не запускается.

Вот так беру исходник:

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

П.С. Я разбиваю источник на список строк, затем просматриваю его. Item - это часть всего источника html

РЕДАКТИРОВАТЬ: в моем случае элемент выглядит примерно так:

руб.230

Malloc

Ответов: 1

Ответы (1)

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 как байты и не декодируйте его, либо декодируйте его и проверяйте, являются ли символы Unicode подстрокой:

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

Или, что проще:

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

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

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

Кроме того, латиница p, вероятно, должна быть кириллицей р. Эти двое выглядят одинаково, но это совершенно разные персонажи.

2022 WebDevInsider