XML输出错误的编码格式

时间:2016-06-06 08:10:22

标签: c# xml umbraco7

我正在获取XML Feed并得到错误的字符编码(我认为)。

XML Feed附带斯堪的纳维亚字母,例如“æøå”,输出中没有显示这些字母,而是将它们显示为:“ÆÔ等。

我正在使用XDocument来解析XML字符串,并且我已经给出了以下声明:

xDocument.Declaration = new XDeclaration("1.0", "utf-8", null);

当我在视图中输出XML时,我尝试过CultureInfo.InvariantCulture以及Html.Raw等,但似乎没有任何效果。

我希望你能提供帮助。

提前致谢。

代码:

EventArchiveViewModel:

public IEnumerable<EventItemViewModel> EventItems
{
    get
    {
        var list = new List<EventItemViewModel>();
        var webClient = new WebClient();
        var xmlString = webClient.DownloadString(EventArchiveModel.XmlFeedUrl);
        var xDocument = XDocument.Parse(xmlString);
        xDocument.Declaration = new XDeclaration("1.0", "utf-8", null);
        foreach (var item in xDocument.Elements().Descendants("event")) {
            list.Add(new EventItemViewModel(new EventItemModel(item)));
        }
        return list;
    }
}

这是EventItemModel中的一个属性:

public string Name
{
    get
    {
        return XmlElement.Descendants("name").FirstOrDefault().Value;
    }
}

以下是视图的一部分:

<div class="large-2 medium-6 columns">
   <p class="text-headline_block">
      @item.Name
   </p>
</div>

1 个答案:

答案 0 :(得分:1)

问题是你的下载。 WebClient Encoding.Default Encoding.UTF8的默认编码var webClient = new WebClient { Encoding = Encoding.UTF8 }; var xmlString = webClient.DownloadString(EventArchiveModel.XmlFeedUrl); var doc XDocument.Parse(xmlString); foreach (var item in doc.Descendants("event")) { // ... }

将其更改为using (var stream = webClient.OpenRead(EventArchiveModel.XmlFeedUrl)) { var doc = XDocument.Load(stream); } ,您的字符串应正确解码。注意,不需要对XML声明做任何事情,这是不相关的。

{{1}}

您还可以通过将流直接加载到DOM中来删除下载字符串的步骤:

{{1}}