кодирование xml для десериализации в c # - PullRequest
0 голосов
/ 05 июля 2018

У меня есть несколько XML-файлов, которые я хочу десериализовать.

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». Как я могу справиться с ними обоими?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Полагаю, этот ответ получение кодировки xml поможет получить кодировку. Когда вы десериализуете его, вы можете использовать что-то похожее на приведенное ниже;

public static T DeserializeObject<T>(string objectXml, Encoding encoding)
    {
        XmlSerializer xs = new XmlSerializer(typeof(T));
        MemoryStream memoryStream = new MemoryStream(StringToByteArray(objectXml, encoding));
        T deserializedObject = (T)xs.Deserialize(memoryStream);
        return deserializedObject;
    }
0 голосов
/ 05 июля 2018

Попробуйте использовать FileStream вместо StreamReader. XmlSerializer внутренне создаст XmlTextReader, который обнаружит кодировку.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...