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);
        }
    }
}