如何最好地检测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
好的,我应该早点想到这个. 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,encoding);

        using (var reader = XmlReader.Create(txtreader,context))
        {
            return XElement.Load(reader);
        }
    }
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇