は、私は次のコードを持っている任意のエンコーディングで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
[XmlReaderCreate(Stream)](http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.create.aspx)オーバーロードを呼び出すだけで、同じエンコーディング? –
@petrk。 - XmlTextReaderは明示的に 'Encoding'プロパティを提供するクラスで使用しています。他に何を念頭に置いていたのか分かりません。 –
さて、私に説明させてください。 'XElement.Load(XmlReader.Create(new FileStream(filepath、FileMode.Open)))'はいくつかのことを行うべきであると思われます(簡潔にするためにリソースを省略しています)。 [XmlReader.Create(Stream)](http://msdn.microsoft.com/en-us/library/756wd7zs.aspx)のドキュメントには、次のように書かれています。_ XmlReaderは、ストリームの最初のバイトをスキャンしてバイトオーダーマークを探します。エンコーディングの他の符号。エンコードが決定されると、エンコードがストリームの読み取りを続行するために使用され、入力が(Unicode)文字のストリームとして解析され続けます。エンコードの検出 –