Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net字符串与排序规则的比较_C#_Utf 8_Collation_String Comparison - Fatal编程技术网

C# .net字符串与排序规则的比较

C# .net字符串与排序规则的比较,c#,utf-8,collation,string-comparison,C#,Utf 8,Collation,String Comparison,我有两个不同的字符串XXÈ和XXE。在这种情况下,是否有任何方法可以使用排序规则来比较它们,这将是UTF8通用CI-我需要它们相等?我见过几个涉及MSSQL或SQLLite的例子,但这会给我的项目增加不必要的依赖性。所以,我的问题是-在纯.net特别是c中有没有办法做到这一点 更新: 让我们以任何像样的SQL引擎为例。您可以创建一个表,也可以选择该表的排序规则。在我们的例子中,XXÈ和XXE将存储在表中,它们将根据编码具有不同的二进制表示形式,但是当您搜索XXE时,它也将匹配XXÈ 我的情况非常

我有两个不同的字符串XXÈ和XXE。在这种情况下,是否有任何方法可以使用排序规则来比较它们,这将是UTF8通用CI-我需要它们相等?我见过几个涉及MSSQL或SQLLite的例子,但这会给我的项目增加不必要的依赖性。所以,我的问题是-在纯.net特别是c中有没有办法做到这一点

更新:

让我们以任何像样的SQL引擎为例。您可以创建一个表,也可以选择该表的排序规则。在我们的例子中,XXÈ和XXE将存储在表中,它们将根据编码具有不同的二进制表示形式,但是当您搜索XXE时,它也将匹配XXÈ

我的情况非常相似。我有一个文本文件,里面有一些字符串UTF8。我想在屏幕上显示排序后的值——排序规则同样重要,我想让用户搜索值。用于搜索的排序规则将是一个选项

您可以使用一点LINQ电源:

string initial = "XXÈ";
string normal = initial.Normalize(NormalizationForm.FormD);

var withoutDiacritics = normal.Where(
    c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark);
string final = new string(withoutDiacritics.ToArray());
bool equals = "XXE".Equals(final); // true

参考资料:

请看一下@Selman22-谢谢。首先,编码仅指字符串在内部的表示方式。我仍然需要E显示为E和È为È,但当我编写代码时,我需要È与E相等。类似SQL的东西XXE将根据表的排序规则找到XXÈ;我在考虑更自动化的东西。不需要我手动清理变音符号和其他东西的文本。这几乎不可能涵盖所有语言/情况。@dcg:我不明白为什么不可能。你想要一种C语言的方法,所以把它放在一个method,甚至是一个有意义名称的字符串扩展中,在你需要的地方用它来代替==或Equals。这不是完全不可能的。但是,如果某些字符在视觉上有某种不同,尽管它们的意义非常接近,我该如何处理任何中文/日文排序?