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"

在顶行。有什么想法吗?

C#/.NET:XDocument 总是有错误的编码

与其将数据读入字节数组并自己解码,不如将其读取为流,并让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);