如何最好地检测XML文件中的编码?

前端之家收集整理的这篇文章主要介绍了如何最好地检测XML文件中的编码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
要使用任意编码加载XML文件,我有以下代码
  1. Encoding encoding;
  2. using (var reader = new XmlTextReader(filepath))
  3. {
  4. reader.MoveToContent();
  5. encoding = reader.Encoding;
  6. }
  7.  
  8. var settings = new XmlReaderSettings { NaMetable = new NaMetable() };
  9. var xmlns = new XmlNamespaceManager(settings.NaMetable);
  10. var context = new XmlParserContext(null,xmlns,"",XmlSpace.Default,encoding);
  11. using (var reader = XmlReader.Create(filepath,settings,context))
  12. {
  13. return XElement.Load(reader);
  14. }

这有效,但打开文件两次似乎有点低效.是否有更好的方法来检测编码,以便我可以这样做:

  1. 1. Open file
  2. 2. Detect encoding
  3. 3. Read XML into an XElement
  4. 4. Close file
好的,我应该早点想到这个. XmlTextReader(它给我们编码)和XmlReader.Create(允许我们指定编码)接受Stream.那么首先打开一个FileStream,然后将它与XmlTextReader和XmlReader一起使用,如下所示:
  1. using (var txtreader = new FileStream(filepath,FileMode.Open))
  2. {
  3. using (var xmlreader = new XmlTextReader(txtreader))
  4. {
  5. // Read in the encoding info
  6. xmlreader.MoveToContent();
  7. var encoding = xmlreader.Encoding;
  8.  
  9. // Rewind to the beginning
  10. txtreader.Seek(0,SeekOrigin.Begin);
  11.  
  12. var settings = new XmlReaderSettings { NaMetable = new NaMetable() };
  13. var xmlns = new XmlNamespaceManager(settings.NaMetable);
  14. var context = new XmlParserContext(null,encoding);
  15.  
  16. using (var reader = XmlReader.Create(txtreader,context))
  17. {
  18. return XElement.Load(reader);
  19. }
  20. }
  21. }

这就像一个魅力.以独立于编码的方式读取XML文件应该更优雅,但至少我只打开了一个文件.

猜你在找的XML相关文章