C#/.NET:XDocument 总是有错误的编码
本文关键字:有错误 编码 XDocument NET | 更新日期: 2023-09-27 18:32:35
我在XDocument类中遇到了问题。我正在为我的第一个WP8.1应用程序加载在线XML API的信息,如下所示:
try
{
var xmlDoc = XDocument.Load(_url);
return xmlDoc;
}
catch (XmlException)
{
HttpClient http = new HttpClient();
HttpResponseMessage response = await http.GetAsync(new Uri(_url));
var webresponse = await response.Content.ReadAsStringAsync();
var content = XmlCharacterWhitelist(webresponse);
var xmlDoc = XDocument.Parse(content);
return xmlDoc;
}
但这两种方式都返回了错误的编码。例如,德语变音符号以错误的方式显示。我加载的每个 XML 文件都有
XML 版本="1.0" 编码="utf-8"
在顶行。有什么想法吗?
与其将数据读入字节数组并自己解码,不如将其读取为流,并让XDocument.Load
从数据中检测编码:
using (HttpClient http = new HttpClient())
{
using (var response = await http.GetAsync(new Uri(_url)))
{
using (var stream = await response.Content.ReadAsStreamAsync())
{
return XDocument.Load(stream);
}
}
}
我通过这样做来修复它:
HttpClient http = new HttpClient();
var response = await http.GetAsync(new Uri(_url));
var buffer = await response.Content.ReadAsBufferAsync();
byte[] byteArray = buffer.ToArray();
string content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
var xmlDoc = XDocument.Parse(content);
return xmlDoc;
使用 XmlReader 应该可以解决问题
string content = "your xml here";
StringReader sReader = new StringReader(content);
XmlTextReader xReader = new XmlTextReader(sReader);
XDocument xmlDoc = (XDocument)XDocument.ReadFrom(xReader);