Для загрузки XML-файлов с произвольным кодированием у меня есть следующий код:Как лучше всего обнаружить кодировку в 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);
}
Это работает, но это кажется немного неэффективным, чтобы открыть файл в два раза. Есть ли лучший способ обнаружить кодирование, которое я могу сделать:
1. Open file
2. Detect encoding
3. Read XML into an XElement
4. Close file
Может ли перехват [XmlReaderCreate (Stream)] (http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create.aspx) работать одинаково с точки зрения обнаружения кодирование? –
@petrk. - Я использую XmlTextReader явно, так как это класс, предоставляющий свойство «Кодирование». Не знаете, что еще вы имели в виду? –
Право, позвольте мне объяснить. Кажется, что 'XElement.Load (XmlReader.Create (новый FileStream (путь к файлу, FileMode.Open)))' должен сделать кое-что (распоряжение ресурсами опущено для краткости). В документации для [XmlReader.Create (Stream)] (http://msdn.microsoft.com/en-us/library/756wd7zs.aspx) говорится: _The XmlReader сканирует первые байты потока, ищущие отметку порядка байтов или другой признак кодирования. Когда кодирование определено, кодирование используется для продолжения чтения потока, и обработка продолжает анализировать входные данные как поток символов (Unicode). Мне было интересно, не отличается ли ваше явное определение кодировки –