Unicode Windows和Linux之间的特殊字符比较行为差异

Unicode Windows和Linux之间的特殊字符比较行为差异,unicode,string-comparison,utf-16,Unicode,String Comparison,Utf 16,为了排序,我不得不比较日语字符的顺序。在Windows平台中,我使用CompareStringW函数,在Linux平台中,我使用wcscasecmp函数进行比较。比较以下UTF-16字符序列时,函数的输出不同 字符串1-{0x65e5,0x672c} 字符串2-{0xff7a,0xff8a} 在Windows中,CompareStringW返回CSTR_大于,表示字符串1大于。其中,与Linux中一样,wcscasecmp返回“-39317”,表示字符串2更大 使用标志(NORM_IGNOREC

为了排序,我不得不比较日语字符的顺序。在Windows平台中,我使用CompareStringW函数,在Linux平台中,我使用wcscasecmp函数进行比较。比较以下UTF-16字符序列时,函数的输出不同

字符串1-{0x65e5,0x672c}

字符串2-{0xff7a,0xff8a}

在Windows中,CompareStringW返回CSTR_大于,表示字符串1大于。其中,与Linux中一样,wcscasecmp返回“-39317”,表示字符串2更大

使用标志(NORM_IGNORECASE | NORM_IGNOREKANATYPE | NORM_IGNOREWIDTH | SORT_STRINGSORT)调用Windows函数


有谁能引导我理解为什么平台之间的行为不同?还有,有没有办法在不同的平台上获得相同的行为?

不同的平台、不同的API、不同的规则。为什么结果会有所不同,这让你感到惊讶?如果希望结果一致,请在两个平台上使用相同的API。有很多跨平台的Unicode API可用。我同意你的观点。但我试图理解不同的规则。我试着通过微软的API规则。我对这件事不太了解。你能提供一些关于跨平台Unicode API的参考资料吗?谢谢。您设置了相同的区域设置吗?是的,两个平台都设置了美式英语。