Aşağıdaki kod var keyfi kodlamasıyla XML dosyalarını yüklemek için: Bu işlerXML dosyasında kodlamayı en iyi nasıl tespit edebilirim?
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);
}
, ancak iki kez dosyayı açmak için biraz verimsiz görünmektedir.
1. Open file
2. Detect encoding
3. Read XML into an XElement
4. Close file
[XmlReaderCreate (Akışı)] 'nın (http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create.aspx) aşırı yüklenmesini çağırmak, aynı şekilde kodlama? –
@petrk. - Ben 'Encoding' özelliği sağlayan sınıf beri XmlTextReader açıkça kullanıyorum. Aklında başka ne olduğundan emin değil misiniz? –
Doğru, açıklamama izin ver. Görünüşe göre XElement.Load (XmlReader.Create (yeni FileStream (dosya yolu, FileMode.Open))) 'ın bazı şeyleri yapması gerekiyor (kısırlık için atılan kaynakları bertaraf etmek). [XmlReader.Create (Stream)] için belgeler (http://msdn.microsoft.com/en-us/library/756wd7zs.aspx) diyor ki: _XmlReader, bayt sırası işareti arayan akışın ilk baytını tarar veya diğer kodlama işareti. Kodlama belirlendiğinde, kodlama akışı okumaya devam etmek için kullanılır ve işlem girişi (Unicode) karakter akışı olarak ayrıştırmaya devam eder. Eğer açık –