® преобразуется в ® в Python при анализе XML - PullRequest
0 голосов
/ 27 сентября 2011

Мой RSS-канал содержит:

<title><![ CDATA[HBO Wins 19 Emmy® Awards, The Most of Any Network This Year]]></title>

Теперь я анализирую RSS, а затем присваиваю заголовок заголовку, как показано ниже:

 for item in XML.ElementFromURL(feed).xpath('//item',namespaces=NEWS_NS):
        title = item.find('title').text
        Log("Title :"+title)

и когда я проверяю выход илизатем в файле журнала я вижу заголовок, как показано ниже:

HBO выигрывает 19 наград Emmy®, большинство сетей в этом году.

® преобразуется в ®,Все, что я пытался использовать HTML-парсер, но безрезультатно.

Ответы [ 3 ]

1 голос
/ 28 сентября 2011

Вы заявляете, что кодировка канала ISO-8859-1.

В этом случае, если байты, которые вы говорите, следует интерпретировать как ®, на самом деле C2 AE, то текст действительно, действительно равен Emmy® Awards, и все работает так, как оно должен. Если бы отправитель предполагал другой текст, он отправил бы другие данные или установил бы кодировку по-другому.

Если бы кодировкой канала было UTF-8, а байты, отправленные по проводу, были все еще C2 AE, то текст был бы Emmy® Awards.

Если кодирование подачи было ISO-8859-1, а байты, отправленные по проводам, были просто AE, без C2, то текст был бы Emmy® Awards.

Чтобы убедиться, что это за байты, используйте команду od -x в Unix или команду d в debug.exe для Windows. Не доверяйте Блокноту в подобных ситуациях. Это ложь.

0 голосов
/ 27 сентября 2011

Я попробовал следующее и сработало:

title = item.find('title').text
title = title.encode('iso-8859-1')

Когда я получаю строку, преобразованную в UTF-8 (® в ®), и преобразовываю ее обратно в iso-8859-1 (® в ®) и получаю правильный вывод

0 голосов
/ 27 сентября 2011

Вы получили некоторый текст, закодированный с использованием UTF-8, но в какой-то момент эти байты неправильно интерпретируются как ISO-8859-1 или другая кодировка.

Без дополнительного контекста трудно сказать,именно там, где происходит ошибка.Сначала вы должны проверить кодировку, используемую для чтения вашего файла журнала.

...