将XDocumnet表格win-1251编码为utf-8

时间:2015-07-14 08:45:51

标签: c# xml utf-8 linq-to-xml encode

我尝试将XDocument从win-1转换为utf-8。但在原始视图中,俄罗斯人物观点不好。

var encoding = new UTF8Encoding(false,false);

        XmlTextWriter xmlTextWriter = new XmlTextWriter("F:\\File", Encoding.GetEncoding("windows-1251"));
        document.Save(xmlTextWriter);
        xmlTextWriter.Close();
        xmlTextWriter = null;

        string text = File.ReadAllText("F:\\File", Encoding.Default);
        XDocument documentcode = XDocument.Parse(text);
        xmlTextWriter = new XmlTextWriter(_Stream, encoding);
        documentcode.Save(xmlTextWriter);
        xmlTextWriter.Flush();

        _Stream.Position = 0;
        Headers.ContentType = new MediaTypeHeaderValue("application/xml");

这是SOAPUI中的原始视图

<?xml version="1.0" encoding="utf-8"?><StatObservationList><StatObservation><ObjectID>0b575ec1-7dea-41c4-a1f0-287190715ed2</ObjectID><Name>Тестовое статнаблюдение</Name><Code>GPPCode42</Code></StatObservation><StatObservation><ObjectID>3a871ea1-06ee-4991-a263-d643b424bdd4</ObjectID><Name>МиСП</Name><Code /></StatObservation></StatObservationList>

1 个答案:

答案 0 :(得分:0)

我想我现在已经得到了它。无论出于何种原因,XDocument中的文字都使用Windows-1251进行了错误解码。

理想情况下,您需要返回源并确保正确解码(使用UTF8)。转换它可能不是一个完全没有损失的过程,因为UTF8中的代码点在Windows-1251中没有表示(快速浏览code page没有显示{{1}例如)。

但是,要事后转换它,最简单的方法就是将文本恢复,获取解码后的编码字节,然后使用正确的编码对其进行解码:

0x98