2011-06-27 59 views
3

我想在C#中使用XmlReader類寫一個簡單的RSS提要閱讀器。我遇到的問題是,根據我的理解,某些Feed使用某些字符的HTML表示,例如標題/說明中的撇號’。實際上,我看過的幾份報紙有一些文章,只是用一個普通的舊單引號作爲撇號,有些則用146代替。我曾考慮在顯示標題/描述之前進行字符串替換, d真的寧願避免雜亂無章,找到適當的解決方案,如果有的話,也適用於其他使用類似格式的字符。 任何建議將非常感激。C#RSS閱讀器,處理與’和類似

+0

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

+0

例如,地球和郵件飼料http://www.theglobeandmail。 com/pages/rss /幾乎總是至少有一篇文章的標題中帶有‘或’字符。請注意,只有使用我的瀏覽器(ie9)查看供稿頁時纔會看到它們。 – Egor

+0

@Egor:你有沒有設法讓它工作?您使用了哪種解決方案? – sll

回答

0

您可以使用HttpUtility.HtmlDecode

+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

按照統一規格,146(0x92)不撇號,它是「私人使用一個「角色。

您可能會有一些編輯器粘貼來自Word的內容(啓用智能引號),這會以不同的編碼方式(Windows-1252)提供內容。

您應該嘗試指定正確的編碼(「Windows-1252」或代碼頁1252),它可能會工作。