有些时候,Unicode字符串在规范意义下等效,但在排序时可能并不相等。
#include <iostream>
#include <cstring>
#include <clocale>
int main()
{
std::setlocale(LC_COLLATE, "en_US.UTF-8");
if (std::strcoll("\xc3\xa9", "e\xcc\x81"))
std::cout << "FAIL: No Unicode normalization here" << std::endl;
else
std::cout << "WIN: Unicode normalization is performed" << std::endl;
}
这个程序在我使用Cygwin模拟的Windows机器上运行成功,但在我手头能获取到的每台Linux系统上都失败了。
这是预期行为吗?有哪些Linux系统可以成功运行呢?Mac OS X和FreeBSD呢?
我知道我可以使用第三方库对其进行规范化和规范等价处理。我关心的是UTF-8语言环境下的标准排序规则。
这个问题的灵感来源于这个问题。
*.UTF-8
区域设置。语言标准提到了C
区域设置,POSIX 添加了POSIX
区域设置。我对*.UTF-8
区域设置感兴趣,是的,我指的是特定于实现的区域设置。 - n. m.