2011-06-27 3 views
3

XmlReaderクラスを使用して、C#で簡単なRSSフィードリーダーを作成しようとしています。私が遭遇した問題は、いくつかのフィードが、私が理解しているところから、タイトル/説明のアポストロフィのような一部の文字のHTML表現(’)を使用することです。実際、私が見ていた新聞には、アポストロフィとして使われていた普通の古い一重引用符と、それが146で置き換えられたものがいくつかありました。タイトル/ディスクリプションを表示する前に文字列置換を行うことを考えましたが、 dは本当にむしろkludgingを避けて、適切な解決方法を見つけます。もしあれば、それは同様の形式を使用する他の文字でも機能します。 何か提案がありがとうございます。C#でRSSリーダを扱っています。’など

+0

可能な複製http://stackoverflow.com/questions/122641/how-can-i-decode-html-characters-in-c – DaveShaw

+0

たとえば、地球とメールのフィードhttp://www.theglobeandmail。 com/pages/rss /には、ほとんどの場合、タイトルに‘または’文字の記事が少なくとも1つあります。私のブラウザ(ie9)だけでフィードページを見ると、私はそれらを見ることに注意してください。 – Egor

+0

@ Egor:あなたはそれが働くように管理できましたか?どのソリューションを使用しましたか? – sll

答えて

0
+1

これは、数字の文字参照をデコードしません。これは、ポスターが要求しているものです。 – wsanville

+0

私はHTMLDecodeを試しましたが、アポストロフィで置き換えるのではなく、文字列から文字を完全に取り除いているようです。 「’を獲得しました」よりも「あきらめない」ことを示したいので、これはまだ大きな改善です。他の提案がうまくいかない場合は、これを参照してください。ありがとう、役に立つポスト。 – Egor

0

はあなたがフィードを読みながら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; 
} 
+1

これは実際には本当に便利です。私はこの名前空間を認識していなかったので、実際に使用すると思います。私のコードを単純化し、より柔軟にするため、提案に感謝します。残念ながら、それは同じ古い’と’コードをそのままテキストを表示するように見えるので、手元の問題を解決しません。 – Egor

0

Unicodeの仕様によると、146(0x92)がアポストロフィではない、それは " PRIVATE USE ONE "文字を使用します。

Wordのコンテンツを貼り付けるエディタがあり(スマート引用符を有効にしている)、別のエンコーディング(Windows-1252)でコンテンツを提供している可能性があります。

正しいエンコーディング( "Windows-1252"またはコードページ1252)を指定してください。正しく動作することがあります。

関連する問題