C#/.NET:XDocument 总是有错误的编码
C#/.NET: XDocument always has the wrong encoding
我的 XDocument 有问题 class。我正在为我的第一个 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 version="1.0" encoding="utf-8"
在顶行。有什么想法吗?
使用 XmlReader 应该可以解决问题
string content = "your xml here";
StringReader sReader = new StringReader(content);
XmlTextReader xReader = new XmlTextReader(sReader);
XDocument xmlDoc = (XDocument)XDocument.ReadFrom(xReader);
我通过这样做修复了它:
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;
与其将数据读入字节数组并自行解码,不如将其作为流读取并让 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);
}
}
}
我的 XDocument 有问题 class。我正在为我的第一个 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 version="1.0" encoding="utf-8"
在顶行。有什么想法吗?
使用 XmlReader 应该可以解决问题
string content = "your xml here";
StringReader sReader = new StringReader(content);
XmlTextReader xReader = new XmlTextReader(sReader);
XDocument xmlDoc = (XDocument)XDocument.ReadFrom(xReader);
我通过这样做修复了它:
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;
与其将数据读入字节数组并自行解码,不如将其作为流读取并让 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);
}
}
}