将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>
我想我现在明白了。无论出于何种原因,使用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);