将 XDocumnet 从 win-1251 编码为 utf-8
Encode XDocumnet form win-1251 to utf-8
我尝试将 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>
我想我现在明白了。无论出于何种原因,您 XDocument
中的文本已被错误地使用 Windows-1251 解码。
理想情况下,您需要回到源代码并确保它被正确解码(使用 UTF8)。转换它可能不是一个完全无损失的过程,因为 UTF8 中的代码点在 Windows-1251 中没有表示(快速浏览 code page 没有显示 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);
我尝试将 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>
我想我现在明白了。无论出于何种原因,您 XDocument
中的文本已被错误地使用 Windows-1251 解码。
理想情况下,您需要回到源代码并确保它被正确解码(使用 UTF8)。转换它可能不是一个完全无损失的过程,因为 UTF8 中的代码点在 Windows-1251 中没有表示(快速浏览 code page 没有显示 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);