如何让我的c#代码识别“ö”?

时间:2012-08-18 08:20:20

标签: c# utf-8

如何让我的c#代码识别“ö”?

查询的输出很好并且格式化了所有特殊字符都是可见的,但在代码隐藏中,我不能使用它们进行排序。

示例:

if (link.Contains("teborg"))
{
    CountRss++;
    Response.Write("<p class='RssCont'><a href='" + link + "' target='new'><b>" + title + "</b></a><br/>");
    Response.Write(description + "</p>");
}

将在标题中给出“Göteborg”的几个结果,但是:

if (link.Contains("Göteborg"))
{
    CountRss++;
    Response.Write("<p class='RssCont'><a href='" + link + "' target='new'><b>" + title + "</b></a><br/>");
    Response.Write(description + "</p>");
}

根本不会给出任何结果。

2 个答案:

答案 0 :(得分:0)

如果您的代码正确呈现链接,则应对其进行编码,结果不会包含非ASCII字符。

根据网址中单词的位置,您可能需要搜索不同的文字才能找到匹配项。

请注意,使用适当的Uri类来处理url会让生活更轻松。还要确保您具有正确编码的链接,以避免页面上出现脚本注入攻击。

答案 1 :(得分:0)

您的代码非常合理,代码也很好,问题在于数据。这里有四种可能性。

第一个是编码问题,但我怀疑是这种情况,因为你说它渲染得很好,所以我非常怀疑这是问题,或者你也有问题。

第二个是由ö组成的öo之间的冲突,其后是组合 - diaresis。这不太可能,但是将字符串放入具有link.Normalize()的NFC中将会捕捉到这一点。

第三个是因为它是一个URI,它可能是URI而不是IURI形式。所以它会G%c3%b6teborg(实际上,它可以是G%C3%b6teborgG%c3%B6teborgG%C3%B6teborg)。使用Uri.UnescapeDataString(link)或任何不同的方法对字符串进行Unescape。这是我敢打赌的。

第四个是它可以被XML转义(因为它来自RSS来判断所使用的名称),在这种情况下HtmlDecode应该将其排序为禁止定义其他实体的DTD,HTML的编码是XML的超集。但是,只有在使用基于文本而不是基于XML的方法解析RSS时才能实现这一点,在这种情况下,您遇到了更大的问题。如果您正在使用XmlReader或XmlDocument或任何其他基于XML的类,则必要时已经为您完成了此解码,因此这不是问题。

所以第三种似乎是最有可能的,Uri.UnescapeDataString(link)似乎是最有希望的。

你可能想要一个不太精确的检查,区分大小写的char字符串。其他方法也可以匹配göteborgGÖTEBORG。还有一些会例如匹配goeteborg(通常用英语将ö音译为oe - 这通常用德语而非瑞典语完成,但可能仍然可以完成)。 (例如,匹配英语Gothenburg或丹麦语Gøteborg是一个更为复杂的问题。)