“&安培;”和撇号出现了一个符号

时间:2014-02-12 18:34:27

标签: c# string xaml windows-8

我从Web服务端点获取数据,并将其放入for循环中的列表中。该服务从Wordpress网站获取数据。

 var list = new ItemList
      (
         (string)data.id.ToString(),
          (string)data.name,

          (string)subcategory

     );

然后我在XAML页面上打印它。代码工作正常,因为它成功地从服务获取数据并将其打印在我的Windows 8应用程序的页面上。

但是在(string)data.name,中,如果名称包含“&”,则为项目的名称。它在应用中显示为$#038;。此外,如果项目名称包含“'”,撇号,则显示为’.

EG。 D& G,显示为D $#038; ģ

“&”并且“'”显示为这些奇怪的符号。

我如何摆脱这些并修复它们,以便它们在应用程序中正确呈现。

3 个答案:

答案 0 :(得分:2)

我将冒险给你一个错误的提示,因为我猜你在谈论Windows 8商店应用程序(XAML),因此你无法访问.NET上的每个类,但是...

如何解码HTML实体?

检查此HttpUtility方法:HtmlUtility.HtmlDecode

检查System.dll上的WebUtility.HtmlDecode,因此适用于Windows 8商店应用。

您需要在Visual Studio项目中添加对System.Web的引用。

答案 1 :(得分:0)

你可以use WebUtility.HtmlDecode Method (String)

或者,如果您不想添加其他库,则可以使用。

public string Decode(string text)
{
    var replacements = new Dictionary<string, char> {
      { "&#8217;", ''' },
      // ...etc
    }

    var sb = new StringBuilder( text );

    foreach( var c in replacements.Keys ) {
      sb.Replace( c.ToString(), replacements[c] );
    }

    return sb.ToString();
}

答案 2 :(得分:0)

看起来该服务正在返回XML转义实体。 &#038;表示代码为(十进制)38(&)的字符。 &#8217;类似,代码为8217()。

您可以使用System.Web.HttpUtility.HtmlDecode(inputString)对这些进行解码,但这需要引用System.Web。如果您不想或不能参考,可以尝试这样的事情:

var xml = new XmlDocument();
xml.LoadXml("<x>" + inputString + "</x>");
var output = xml.InnerText;

鉴于Testing &#8217;stuff&quot; &#038; things,它将返回Testing ’stuff" & things

如果可以,我会选择HtmlDecode(),但除非您别无选择,否则请尽量避免使用自己的解码器。