日期:2014-05-17  浏览次数:21469 次

C#中文字符串比较大小问题
C#比较中文字符串时是按照什么比较呢?比较各个Unicode编码吗?和Java的字符串比较有何不同呢?各位大神求指点啊!
C# 中文字符串比较 Java 编码

------解决方案--------------------
这个取决于你用什么样的比较方法(默认为当前的区域文化的比较方式)。
比如:

CultureInfo 拼音 = new CultureInfo(0x804);
CultureInfo 比划 = new CultureInfo(0x20804);

string s1 = "一";
string s2 = "啊";

int c0 = string.Compare(s1, s2, StringComparison.Ordinal);  // -1866
int c1 = string.Compare(s1, s2, 拼音, CompareOptions.None);  //  1
int c2 = string.Compare(s1, s2, 比划, CompareOptions.None);  // -1

可以看到,当采用拼音排序时,'一(yi)'比'啊(a)'大;
当采用笔画排序的时候,'一'比'啊'小;
而最快的比较就是直接哪Unicode内码比较,比如Ordinal下'一'比较小。
有趣的是,Ordinal比较直接给出了两个首字符的差距:'一'的内码为19968,'啊'的内码为21834,两者的区别正好是-1866。