我正試圖解決所有在http://captainobvio.us上生成的RSS源在Internet Explorer(版本8和9)中產生以下錯誤的錯誤:.NET ServiceModel.Syndication - 更改RSS源上的編碼
Feed代碼錯誤從當前的 編碼切換到支持的指定編碼而不是 。行:1個字符:40
<?xml version="1.0" encoding="utf-16"?>
的問題是,通過HTTP頭中發送實際的編碼類型比原稿的聲明的不同。這裏是我的代碼看起來像飼料的輸出寫入HTML:
public ContentResult Index()
{
var feed = _syndication.SyndicateIdeas(_repository.GetIdeas(0,15).Ideas);
var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb, new XmlWriterSettings { Encoding = Encoding.UTF8, NewLineHandling = NewLineHandling.Entitize, NewLineOnAttributes = true, Indent = true}))
{
feed.SaveAsRss20(writer);
writer.Close();
}
return Content(sb.ToString(), "application/rss+xml", Encoding.UTF8);
}
而且這裏是我的代碼看起來像實際建立飼料,使用System.ServiceModel.Syndication在.NET 4.0中:
var feed = new SyndicationFeed("CaptainObvio.us - Recent Ideas",
"The most recent ideas posted by the Community on CaptainObvio.us", new Uri("http://captainobvio.us/"), "CaptainObvio.us", new DateTimeOffset(ideas[0].DatePosted), items)
{
Generator = "CaptainObvio.us - http://captainobvio.us/"
};
return feed;
我想要做的是將XML文檔更改爲utf-8而不是utf-16。我還檢查了Encoding命名空間,看看是否有UTF16選項(所以我可以更正HTTP標頭而不是XML文檔),但無法找到它。
是否有一種簡單的方法直接從System.ServiceModel.Syndication更改XML文檔上的編碼屬性?解決這個問題最簡單的方法是什麼?
達林,優秀的答案。我甚至沒有考慮將StringBuilder作爲問題的根源,並且您對ActionResult進行子類化的建議非常好。如果我可以不止一次地讚揚你,我會。 – Aaronontheweb 2011-03-28 21:25:13
@Aaronontheweb,很高興我能幫上忙。 – 2011-03-28 21:26:31