que estoy tratando de resolver un problema por el que todos los canales RSS que estoy produciendo a http://captainobvio.us producir el siguiente error en Internet Explorer (versiones 8 y 9):.NET ServiceModel.Syndication - Cambio de Codificación de RSS
Error de código de alimentación Cambiar de la codificación actual a la codificación especificada no compatible. Línea: 1 Título: 40
<?xml version="1.0" encoding="utf-16"?>
La cuestión es que el tipo de codificación real enviada a través de la cabecera HTTP es diferente a lo que declara el documento. Aquí es lo que mi código es el siguiente para escribir la salida de la alimentación a 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);
}
Y aquí es lo que mi código es el de construir realmente la alimentación, utilizando System.ServiceModel.Syndication en .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;
lo que me gustaría hacer es cambiar el documento XML para leer UTF-8 en lugar de UTF-16. También verifiqué el espacio de nombres de codificación para ver si había una opción UTF16 (para poder corregir el encabezado HTTP en lugar del documento XML) y no pude encontrar uno.
¿Hay una manera fácil de cambiar el atributo de codificación en el documento XML directamente desde System.ServiceModel.Syndication? ¿Cuál es la forma más fácil de solucionar este problema?
Darin, excelente respuesta. Ni siquiera pensé en mirar a StringBuilder como el origen del problema, y su sugerencia de crear subclases de ActionResult es excelente. Si pudiera votarte más de una vez, lo haría. – Aaronontheweb
@Aaronontheweb, me alegro de poder ayudar. –