如何最好地检测XML文件中的编码? [英] How to best detect encoding in XML file?

查看:221
本文介绍了如何最好地检测XML文件中的编码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

要加载任意编码的XML文件,我有以下代码:

To load XML files with arbitrary encoding I have the following code:

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);
}

这是有效的,但是看起来打开文件有点低效。有没有更好的方法来检测编码,以便我可以做到:

This works, but it seems a bit inefficient to open the file twice. Is there a better way to detect the encoding such that I can do:

 1. Open file
 2. Detect encoding
 3. Read XML into an XElement
 4. Close file


推荐答案

好的,我以前想过这个。 XmlTextReader(给我们的Encoding)和XmlReader.Create(允许我们指定编码)都接受一个Stream。那么首先打开一个FileStream,然后再使用XmlTextReader和XmlReader,就像这样:

Ok, I should have thought of this earlier. Both XmlTextReader (which gives us the Encoding) and XmlReader.Create (which allows us to specify encoding) accepts a Stream. So how about first opening a FileStream and then use this with both XmlTextReader and XmlReader, like this:

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文件应该更加优雅,但至少我只能打开一个文件。

This works like a charm. Reading XML files in an encoding independent way should have been more elegant but at least I'm getting away with only one file open.

这篇关于如何最好地检测XML文件中的编码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆