在C#中使用Unicode字符比较字符串

时间:2014-11-23 16:20:43

标签: c# string unicode

我们知道要将两个字符串与Unicode个字符进行比较,我们会在字符串前面附加N.类似的东西:

N'I am the ````king'.equals(x) 

(在SQL server和x中也包含相同的Unicode字符。)

我们可以在SQL Server中编写。

但假设我有C#代码,其中包含一个名为x的变量:

string x="Hi! I am good ````'"

(使用一些Unicode字符。)

还有另一个变量y,我需要在C#代码中对此进行比较。

如何使用代码将N值附加到字符串?

2 个答案:

答案 0 :(得分:1)

C#中的所有字符串都是Unicode字符串。它们基于名为char的UTF-16 代码单元,每个char只是一个16位整数。

如果xy是C#(引用)string s,那么

x == y

x.Equals(y)

执行序数相等比较。因此,xy必须是完全相同的16位代码单元序列,才能将其评估为true。没有执行Unicode规范化!

.NET提供了其他方法来进行与文化相关的比较或不区分大小写的比较。这些比简单的序数比较更复杂。您还可以对xy进行规范化,并比较结果。

答案 1 :(得分:1)

在C#中,您可以使用==运算符在两个字符串之间执行二进制相等比较。事实上,与String.Equals(string a, string b)方法不同,此运算符将调用String.Equals(string value)静态方法,该方法将处理空引用。

if (x == y) { Console.WriteLine("The variables x and y are equal."); }

如果您希望进行文化敏感和/或不区分大小写的比较,可以使用String.Equals(string a, string b, StringComparison comparisonType)方法并指定适当的值:CurrentCulture,CurrentCultureIgnoreCase,Ordinal或OrdinalIgnoreCase。 (还有InvariantCulture和InvariantCultureIgnoreCase,但强烈建议不要使用它们)

if (string.Equals(x, y, StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("The variables x and y are equal by using the OrdinalIgnoreCase comparison."); }

如果要对字符串进行排序,可以使用String.Compare的重载之一。使用String.Compare的良好做法是始终使用其中一个重载,您明确指定CultureInfoStringComparison。 (如果要根据特定文化执行字符串比较,那么指定CultureInfo的内容特别有用。)