Para cargar archivos XML con la codificación arbitraria tengo el siguiente código:¿Cómo detectar mejor la codificación en un archivo XML?
Encoding encoding;
using (var reader = new XmlTextReader(filepath))
{
reader.MoveToContent();
encoding = reader.Encoding;
}
var settings = new XmlReaderSettings { NameTable = new NameTable() };
var xmlns = new XmlNamespaceManager(settings.NameTable);
var context = new XmlParserContext(null, xmlns, "", XmlSpace.Default,
encoding);
using (var reader = XmlReader.Create(filepath, settings, context))
{
return XElement.Load(reader);
}
Esto funciona, pero parece un poco ineficiente para abrir el archivo dos veces. ¿Hay una mejor manera de detectar la codificación de tal manera que puedo hacer:
1. Open file
2. Detect encoding
3. Read XML into an XElement
4. Close file
Llamar a la sobrecarga [XmlReaderCreate (Stream)] (http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create.aspx) funciona de la misma manera en términos de detección de la codificación? –
@petrk. - Estoy usando XmlTextReader explícitamente ya que esa es la clase que proporciona la propiedad 'Encoding'. ¿No estás seguro de qué más tienes en mente? –
Bien, déjame explicarte. Parece que 'XElement.Load (XmlReader.Create (new FileStream (filepath, FileMode.Open)))' debería hacer algo (eliminando recursos por brevedad). La documentación de [XmlReader.Create (Stream)] (http://msdn.microsoft.com/en-us/library/756wd7zs.aspx) dice: _El XmlReader escanea los primeros bytes de la secuencia en busca de una marca de orden de bytes o otro signo de codificación. Cuando se determina la codificación, la codificación se utiliza para seguir leyendo la secuencia, y el procesamiento continúa analizando la entrada como una secuencia de caracteres (Unicode). Me preguntaba si su detección de codificación –