如何比较不区分大小写和重音不敏感的字符串

如何比较不区分大小写和重音不敏感的字符串

好吧,这在SQL服务器上很容易完成

但是我想在C#.NET 4.5.1上做同样的事情。

我怎样才能以最恰当的方式做到这一点?

我的意思是这三个字符串在比较时应该返回相等

http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLı-BANT-12cm-x25mt_154202.html 

我需要一个方法,可以说下面这两个是相同的SQL服务器说它们是相同的。

  tarafli TARAFLİ 

要忽略大小写和重音,可以将string.Compare()IgnoreNonSpaceIgnoreCase选项一起使用,如下所示:

 string s1 = "http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html"; string s2 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html"; string s3 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLı-BANT-12cm-x25mt_154202.html"; Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); Console.WriteLine(string.Compare(s2, s3, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 

根据您的评论,这适用于tarafliTARAFLİ

以下代码打印0, 表示字符串相等

 string s1 = "tarafli"; string s2 = "TARAFLİ"; Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 

在这里,它正在使用土耳其文化(我猜测正确的文化是什么)。 这也打印0:

 string s1 = "tarafli"; string s2 = "TARAFLİ"; var trlocale = CultureInfo.GetCultureInfo("tr-TR"); Console.WriteLine(string.Compare(s1, s2, trlocale, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 

你可以使用string.Compare与重载,它带有适当的CultureInfoCompareOptions

 string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase); 

编辑:

关于CultureInfo的问题,来自MSDN :

比较使用culture参数获取特定于文化的信息,例如大小写规则和单个字符的字母顺序。 例如,特定文化可以指定将某些字符组合视为单个字符,以特定方式比较大写和小写字符,或者字符的排序顺序取决于前面或后面的字符。