编码XML以在C#中进行反序列化 [英] encoding xml for deserialization in c#

查看:197
本文介绍了编码XML以在C#中进行反序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几个要反序列化的xml文件。

I have several xml files which I want do deserialize.

var serializer = new XmlSerializer(typeof(Document));
var encoding = Encoding.GetEncoding("Windows-1252");
var sr = new StreamReader(current_file, encoding, true);
var reader = XmlReader.Create(sr);
var i = (Document)serializer.Deserialize(reader);

问题是文件具有不同的编码。 Windows-1252和 iso-8859-1。我该如何处理它们?

The problem is that the files have got different encodings. "Windows-1252" and "iso-8859-1". How can I deal with both of them?

推荐答案

尝试使用 FileStream 而不是 StreamReader XmlSerializer 会在内部创建一个 XmlTextReader 来检测编码。

Try using a FileStream instead of a StreamReader. The XmlSerializer internally will create an XmlTextReader that will detect the encoding.

var serializer = new XmlSerializer(typeof(Document));

using (var fs = new FileStream(current_file, FileMode.Open))
{
    var i = (Document)serializer.Deserialize(fs);
}

要检查使用哪种编码:

Element el1;
Encoding enc1;

using (var fs = new FileStream("Text1252.xml", FileMode.Open))
using (var reader = new XmlTextReader(fs))
{
    reader.MoveToContent();
    enc1 = reader.Encoding;
    el1 = (Element)serializer.Deserialize(reader);
}

这篇关于编码XML以在C#中进行反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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