规范等效的 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 机器上导致了 WIN,而在我可以接触到的每个 Linux 系统上都失败了。
这是预期的行为吗?是否有产生 WIN 的 Linux 系统?Mac OS X 呢?自由BSD?
我知道我可以规范化并与第三方库进行规范等效。我对 UTF-8 语言环境的标准排序规则感兴趣。
这个问题是受这个启发的。