【发布时间】:2011-03-28 14:51:26
【问题描述】:
我正在尝试解决我在http://captainobvio.us 生成的所有 RSS 提要在 Internet Explorer(版本 8 和 9)中产生以下错误的错误:
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);
}
这是我在 .NET 4.0 中使用 System.ServiceModel.Syndication 实际构建提要的代码:
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 文档的编码属性?解决此问题的最简单方法是什么?
【问题讨论】:
标签: .net asp.net asp.net-mvc xml rss