gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:30:28 26 4
gpt4 key购买 nike

要加载具有任意编码的 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);
}

这有效,但打开文件两次似乎效率低下。有没有更好的方法来检测编码,以便我可以这样做:
  • 打开文件
  • 检测编码
  • 将 XML 读入 XElement
  • 关闭文件
  • 最佳答案

    好吧,我应该早点想到这一点。 XmlTextReader(它给我们编码)和 XmlReader.Create(它允许我们指定编码)都接受一个 Stream。那么如何首先打开一个 FileStream 然后将它与 XmlTextReader 和 XmlReader 一起使用,如下所示:

    using (var txtreader = new FileStream(filepath, FileMode.Open))
    {
    using (var xmlreader = new XmlTextReader(txtreader))
    {
    // Read in the encoding info
    xmlreader.MoveToContent();
    var encoding = xmlreader.Encoding;

    // Rewind to the beginning
    txtreader.Seek(0, SeekOrigin.Begin);

    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(txtreader, settings, context))
    {
    return XElement.Load(reader);
    }
    }
    }

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

    关于encoding - 如何最好地检测 XML 文件中的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637855/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com