对于这个问题的回答,我必须比较两个字符。我认为普通的char.CompareTo()方法可以让我指定一个CultureInfo,但事实并非如此。
所以我的问题是:如何比较两个字符并指定 CultureInfo 进行比较?
对于这个问题的回答,我必须比较两个字符。我认为普通的char.CompareTo()方法可以让我指定一个CultureInfo,但事实并非如此。
所以我的问题是:如何比较两个字符并指定 CultureInfo 进行比较?
字符没有启用文化比较,您必须将字符转换为字符串,以便您可以使用例如该String.Compare(string, string, CultureInfo, CompareOptions)
方法。
例子:
char a = 'å';
char b = 'ä';
// outputs -1:
Console.WriteLine(String.Compare(
a.ToString(),
b.ToString(),
CultureInfo.GetCultureInfo("sv-SE"),
CompareOptions.IgnoreCase
));
// outputs 1:
Console.WriteLine(String.Compare(
a.ToString(),
b.ToString(),
CultureInfo.GetCultureInfo("en-GB"),
CompareOptions.IgnoreCase
));
比较字符和字符串之间确实存在差异。让我试着解释一下这个非常简单的基本问题:一个字符总是代表一个 unicode 点。比较字符总是比较代码点,而不考虑它们的相同含义。
如果要比较字符的相同含义,则需要创建一个字符串并使用那里提供的比较方法。其中包括对不同文化的支持。有关如何做到这一点,请参阅 Guffa 的回答。
你试过String.Compare
方法吗?
比较使用当前文化来获取特定于文化的信息,例如大小写规则和单个字符的字母顺序。例如,文化可以指定某些字符组合被视为单个字符,或以特定方式比较大小写字符,或者字符的排序顺序取决于其前面或后面的字符。
String.Compare(str1, str2, false, new CultureInfo("en-US"))
在比较 C# 中的字符时,我认为cultureInfo 并不重要。char 已经是一个 Unicode 字符,因此可以很容易地将两个字符与 CultureInfo 进行比较。