2011-09-27 2 views
0

моего канала ontains:® преобразуется в A® в Python при разборе XML

<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, но не использовать.

+1

Определите, что означает ®. Какая кодировка является фидом? Какую кодировку вы печатаете? Почему вы не используете чудесный http://www.feedparser.org/? Также обратите внимание, что в вашем вызове 'Log()' вы бросаете заголовок на 'str', даже если объект был правильным экземпляром' unicode'. – patrys

+0

@patrys, The feed, encoding = "iso-8859-1". feedparser.org - внешняя библиотека? В этом случае я не могу использовать это. И Можете ли вы прояснить «Какую кодировку вы печатаете?» – Simsons

+0

Кажется, вы получаете правильное представление utf-8 символа «®», но печатаете его на выходе «latin1» ('iso-8859-1'). Я подозреваю, что проблема заключается не в том, как вы декодируете фид, а скорее в том, как вы «Log()» результаты или просматриваете зарегистрированные результаты. – patrys

ответ

0

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

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

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

+0

Скорее всего, в вашем приложении есть * два * ошибки. Одна из причин вашей исходной проблемы. Другой - это «исправление». – wberry

0

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

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

+0

Кодировка, используемая для чтения журнала, - это «UTF-8». Любое предложение получить эту работу !!!! – Simsons

1

Вы заявляете, что кодировка фида - 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. Не доверяйте Блокноту в таких ситуациях. Это ложь.