2015-12-11 4 views
0

Я пытаюсь правильно хранить следующую строку, которая синопсис из https://play.google.com/store/tv/show?id=lXH-sW6govE:HTMLescaping + передавая специальные символы

>>> s='''"Work Out New York" invites viewers to break a sweat 
     with some of New York City’s hottest personal trainers...''' 

>>> import HTMLParser 
>>> HTMLParser.HTMLParser().unescape(s) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 60: ordinal not in range(128) 

Следующая строка должна быть неэкранированными для таких вещей, как ", но не следует пытаться интерпретировать такие вещи, как апостроф, который он эффективно перекодирует.

Как правильно удалить и сохранить следующую строку?

+1

Этот апостроф подозрительно похож на «умную» цитату из микрософт, которая представляет собой некоторую бессмыслицу, определенную вне диапазона ASCII. – roippi

ответ

1

Как отметил @roippi, у вас есть умная цитата в вашем HTML, которая разбивается на HTMLParser.HTMLParser().unescape(s). Вам необходимо передать HTMLParser.HTMLParser().unescape(s) Unicode не str.

Если ваш HTML выпекали в сценарий, то вы можете просто установить кодировку UTF-8 в редакторе и создать Unicode вместо:

# coding=utf-8 
s = u'''"Work Out New York" invites viewers to break a sweat 
     with some of New York City’s hottest personal trainers...''' 

С # coding=utf-8, Python автоматически декодирует вашу строку для вы в Юникод.

Поскольку вы извлекаете это из удаленного источника, вы должны декодировать его в Юникоде, используя соответствующую кодировку. Либо путем проверки заголовка «Content-type» для кодировки, либо с помощью библиотеки запросов «Запросы HTTP», которая делает это для вас и дает вам Unicode от Request.text

Возможно, вы также захотите рассмотреть BeautifulSoup, который поможет вам перемещаться по HTML DOM и unescape, где это необходимо. Опять же, BeautifulSoup выигрывает от декодированного ввода Unicode.

0

Вы можете использовать следующую команду, которая работает:

def unescape(self, s): 
    p = htmllib.HTMLParser(None) 
    p.save_bgn() 
    p.feed(s) 
    return p.save_end() 

Используя обычный HTMLParser.HTMLParser() не делает. Ссылка: https://wiki.python.org/moin/EscapingHtml.

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