Aby wczytać plik XML z dowolnego kodowania Mam następujący kod:Jak najlepiej wykrywać kodowanie w pliku 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);
}
To działa, ale wydaje się nieco nieefektywne, aby otworzyć ten plik dwukrotnie. Czy istnieje lepszy sposób na wykrycie kodowania, który mogę wykonać:
1. Open file
2. Detect encoding
3. Read XML into an XElement
4. Close file
Przeciążanie wywołaniem [XmlReaderCreate (Stream)] (http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create.aspx) działa w ten sam sposób, jeśli chodzi o wykrywanie kodowanie? –
@petrk. - Używam jawnie XmlTextReader, ponieważ jest to klasa udostępniająca właściwość 'Encoding'. Nie wiesz, co jeszcze miałeś na myśli? –
Dobra, pozwól mi wyjaśnić. Wydaje się, że 'XElement.Load (XmlReader.Create (nowy FileStream (ścieżka do pliku, FileMode.Open)))' powinien zrobić coś (usuwanie zasobów pominiętych dla zwięzłości). Dokumentacja dla [XmlReader.Create (Stream)] (http://msdn.microsoft.com/en-us/library/756wd7zs.aspx) mówi: _ XmlReader skanuje pierwsze bajty strumienia szukając znaku kolejności bajtów lub inny znak kodowania. Po określeniu kodowania kodowanie jest używane do kontynuowania odczytu strumienia, a przetwarzanie kontynuuje analizowanie danych wejściowych jako strumienia znaków (Unicode). Zastanawiam się, czy wykrywanie kodu jawnego –