允许重音字符可搜索?

时间:2012-11-12 08:55:44

标签: c# .net string cultureinfo string-comparison

解决:

我使用了以下代码:

var compareinfo = CultureInfo.CurrentCulture.CompareInfo;
var index = compareinfo.IndexOf(strA, strB, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
return index > -1;
  

可能重复:
  Ignoring accented letters in string comparison

我有一个公共Kiosk应用程序,用户可以使用它来搜索感兴趣的地方。说我有一个Café字的商店名称。自助服务终端只允许通过屏幕键盘输入英文字母。问题是当我输入Cafe(没有重音é)时搜索无效,因为用户无法输入字符é。我希望应用程序允许普通e可以搜索所有重音e,同样适用于所有其他各自的字符。我怎么能这样做?

编辑: 商店名称是“BruceCafé”,我搜索“cafe”,它应该显示在我的搜索结果中。

使用

string.Compare("Bruce Café", "cafe", CultureInfo.CurrentCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace)

返回-1

string.Compare("Ben-Gurion University (BGU)", "cafe", CultureInfo.CurrentCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace)

也返回-1

我不知道为什么会这样......

2 个答案:

答案 0 :(得分:1)

如果你在代码中这样做:

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

如果你在T-SQL中这样做:

SELECT *
FROM YourTable
WHERE
   ColumnName COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI

答案 1 :(得分:1)

如果您正在进行自己的字符串比较,则可以通过将CompareOptions.IgnoreNonSpace指定给接受CompareOptions参数的字符串比较方法之一来忽略重音,例如this String.Compare