3

规范等效的 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 语言环境的标准排序规则感兴趣。

这个问题是受这个启发的。

4

1 回答 1

1

据我所知,在 C、C++ 和 POSIX 标准中都没有提到 Unicode 规范化。

因此,实现可能会将规范化留给程序员明确地完成。

更明确地说,在 glibc 欧洲语言环境中显然使用 ISO 14651 作为排序算法。Unicode Collat​​ion FAQ暗示ISO 14651 不进行规范化:规范等效项的统一处理被列为 UCA 和 ISO 14651 之间的区别。

于 2013-11-27T11:02:18.263 回答