如何让我的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>");
}
根本不会给出任何结果。
答案 0 :(得分:0)
如果您的代码正确呈现链接,则应对其进行编码,结果不会包含非ASCII字符。
根据网址中单词的位置,您可能需要搜索不同的文字才能找到匹配项。
请注意,使用适当的Uri类来处理url会让生活更轻松。还要确保您具有正确编码的链接,以避免页面上出现脚本注入攻击。
答案 1 :(得分:0)
您的代码非常合理,代码也很好,问题在于数据。这里有四种可能性。
第一个是编码问题,但我怀疑是这种情况,因为你说它渲染得很好,所以我非常怀疑这是问题,或者你也有问题。
第二个是由ö
组成的ö
和o
之间的冲突,其后是组合 - diaresis。这不太可能,但是将字符串放入具有link.Normalize()
的NFC中将会捕捉到这一点。
第三个是因为它是一个URI,它可能是URI而不是IURI形式。所以它会G%c3%b6teborg
(实际上,它可以是G%C3%b6teborg
,G%c3%B6teborg
或G%C3%B6teborg
)。使用Uri.UnescapeDataString(link)
或任何不同的方法对字符串进行Unescape。这是我敢打赌的。
第四个是它可以被XML转义(因为它来自RSS来判断所使用的名称),在这种情况下HtmlDecode
应该将其排序为禁止定义其他实体的DTD,HTML的编码是XML的超集。但是,只有在使用基于文本而不是基于XML的方法解析RSS时才能实现这一点,在这种情况下,您遇到了更大的问题。如果您正在使用XmlReader或XmlDocument或任何其他基于XML的类,则必要时已经为您完成了此解码,因此这不是问题。
所以第三种似乎是最有可能的,Uri.UnescapeDataString(link)
似乎是最有希望的。
你可能想要一个不太精确的检查,区分大小写的char字符串。其他方法也可以匹配göteborg
和GÖTEBORG
。还有一些会例如匹配goeteborg
(通常用英语将ö
音译为oe
- 这通常用德语而非瑞典语完成,但可能仍然可以完成)。 (例如,匹配英语Gothenburg
或丹麦语Gøteborg
是一个更为复杂的问题。)