C# 如何搜索西里尔语/拉丁语';a';或西里尔/拉丁字符串中的其他类似字符

C# 如何搜索西里尔语/拉丁语';a';或西里尔/拉丁字符串中的其他类似字符,c#,character-encoding,C#,Character Encoding,我正在实现一个过滤器功能。我使用以下方法定义字符串是否适合查询: someString.IndexOf(someSearch, StringComparison.OrdinalIgnoreCase) >= 0 但有时(当然在非常罕见的情况下)值可能类似于“aaa”或“ccc”,忽略语言会更方便用户。西里尔字母和拉丁字母之间没有明确的对应关系。西里尔字母es“С”与拉丁字母“c”完全不同,尽管可能任何包含这两个字母的字体都有相同的字形。在内部表示和字符级处理中,它们就像任何两个不相关的字符

我正在实现一个过滤器功能。我使用以下方法定义字符串是否适合查询:

someString.IndexOf(someSearch, StringComparison.OrdinalIgnoreCase) >= 0

但有时(当然在非常罕见的情况下)值可能类似于“aaa”或“ccc”,忽略语言会更方便用户。

西里尔字母和拉丁字母之间没有明确的对应关系。西里尔字母es“С”与拉丁字母“c”完全不同,尽管可能任何包含这两个字母的字体都有相同的字形。在内部表示和字符级处理中,它们就像任何两个不相关的字符一样不同


如果您希望将西里尔字母es“С”作为拉丁字母“c”接受,您需要自己对其进行编码。但我不认为这会有用。相反,如果您的应用程序只需要拉丁字母,那么您的错误处理例程可以检查是否存在来自其他书写系统的字符,并将此告知用户。

我不明白您在这里问什么。请澄清。一些例子会有所帮助。当我想显示所有包含“c”的stings时,我会在filter文本框中输入英文的“c”。当然,它会返回“cat”并跳过像“Сбб”这样的字符串。当然是edge case,但是用户可能会拼写错误,或者输入信息的人可能会拼写错误。这不是很重要,但对用户来说可能很有用。为什么要跳过
Сб
c
与英语的
c
是不同的字符吗?@Oded是的,c和c是不同的字母。第一个是西里尔字母“es”,第二个是拉丁字母“c”。我不确定OP到底想要什么——想要用西里尔文搜索的用户可能会输入前者,而不是后者,使用IME或其他方式。