将xdocumentnet格式win-1251编码为utf-8

本文关键字:utf-8 编码 win-1251 xdocumentnet 格式 | 更新日期: 2023-09-27 18:02:46

我尝试将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>

将xdocumentnet格式win-1251编码为utf-8

我想我现在明白了。无论出于何种原因,使用Windows-1251对XDocument中的文本进行了错误解码。

理想情况下,您需要回到源并确保它被正确解码(使用UTF8)。转换这可能不是一个完全没有损失的过程,因为UTF8中的代码点在Windows-1251中没有表示(例如,快速浏览代码页就会发现0x98没有表示)。

然而,要转换它最简单的方法就是获取文本,获取它被解码的编码的字节数然后用正确的编码解码:

var windows1251 = Encoding.GetEncoding("windows-1251");
var utf8 = Encoding.UTF8;
var originalBytes = windows1251.GetBytes(document.ToString());
var correctXmlString = utf8.GetString(originalBytes);
var correctDocument = XDocument.Parse(correctXmlString);