【问题标题】:allow accented characters to be searchable? [duplicate]允许重音字符可搜索? [复制]
【发布时间】:2012-11-12 08:55:43
【问题描述】:

已解决:

我使用了以下代码:

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

可能重复:
Ignoring accented letters in string comparison

我有一个公共信息亭应用程序,用户可以使用它来搜索感兴趣的地方。假设我有一个带有 Café 字样的商店名称。信息亭只允许通过屏幕键盘输入英文字母。问题是当我输入 Cafe(没有重音 é)时,搜索无效,因为用户无法输入字符 é。我希望应用程序允许普通 e 可以搜索到所有重音 e 并且同样适用于所有其他相应的字符。我该怎么做?

编辑: 店名是“Bruce Café”,我搜索“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

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

【问题讨论】:

  • 请包含您的“搜索”代码。
  • 从字符串列表中搜索? D B? Lucene.Net?
  • 你能分享你的搜索代码吗?

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


【解决方案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

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 2017-06-15
    • 2012-04-18
    • 2013-12-24
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多