Я пытаюсь устранить ошибку, из-за которой все RSS-каналы, которые я создаю на http://captainobvio.us, выдают следующую ошибку в Internet Explorer (версии 8 и 9):
Ошибка кода подачи. Переключение с текущей кодировки на указанную кодировку не поддерживается.Строка: 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.Я также проверил пространство имен «Кодировка», чтобы выяснить, существует ли опция UTF16 (чтобы я мог исправить заголовок HTTP вместо документа XML), и не смог найти ее.
Существует ли простой способ изменитьАтрибут кодировки в XML-документе непосредственно из System.ServiceModel.Syndication?Какой самый простой способ исправить эту проблему?