C # RSS-ридер, имеющий дело с 'и подобным - PullRequest
3 голосов
/ 28 июня 2011

Я пытаюсь написать простую программу чтения RSS на C #, используя класс XmlReader. Проблема, с которой я столкнулся, заключается в том, что некоторые каналы используют, насколько я понимаю, представления HTML некоторых символов, такие как ’ для апострофа в заголовке / описании. Фактически, в нескольких газетах, на которые я смотрел, было несколько статей, в которых в качестве апострофа использовалась обычная старая одинарная кавычка, а в некоторых - 146. Я рассматривал возможность замены строк перед отображением заголовка / описания, но я ' действительно лучше избегать путаницы и найти правильное решение, если оно есть, которое также будет работать для других персонажей, которые используют подобный формат. Любые предложения будут очень признательны.

Ответы [ 3 ]

0 голосов
/ 28 июня 2011

Используете ли вы встроенные функции в System.ServiceModel.Syndication во время чтения каналов?

Если нет - попробуйте это, я считаю, что это должно автоматически решить проблемы, как я описал:

XmlReader reader = XmlReader.Create(ms);
// Configure XmlReader reader ...
// Create a new Syndication Feed
feed = SyndicationFeed.Load(reader);
SyndicationFeedFormatter formatter;

switch (format)
{
    case FeedFormat.Atom:
        formatter = new Atom10FeedFormatter(feed);
        break;

    default:
    case FeedFormat.Rss:
        formatter = new Rss20FeedFormatter(feed);
        break;
}

foreach (SyndicationItem item in formatter.Feed.Items)
{
     yield return item;
}
0 голосов
/ 28 июня 2011

Согласно спецификации Unicode, 146 (0x92) - это не апостроф, это символ «ЧАСТНОЕ ИСПОЛЬЗОВАНИЕ ОДИН».

Возможно, у вас есть некоторые редакторы, вставляющие содержимое из Word (с включенными умными кавычками), который предоставляет вам содержимое в другой кодировке (Windows-1252).

Вы должны попытаться указать правильную кодировку («Windows-1252» или кодовая страница 1252), и она может работать.

0 голосов
/ 28 июня 2011

Вы можете использовать HttpUtility.HtmlDecode

...