4

使用 std::string 和 UTF8 似乎是一个相当复杂的问题,我找不到对做和不做的很好的解释。

如何在 C++ 中正确使用 UTF8?这是相当混乱的。

我找到boost::locale并设置了全局语言环境:

std::locale::global(boost::locale::generator()(""));

但是,在此之后我需要考虑什么,我什么时候会遇到问题?从文件中写入/读取是否会按预期工作,字符串比较等...?

到目前为止,我知道以下几点:

  • std::regex/boost::regex将不起作用,需要转换为宽字符串并使用 wregex。
  • boost::algorithm::to_upper不行,需要用boost::locale::to_upper

除此之外我还需要注意什么?

4

1 回答 1

3

欢迎来到 Unicode 的壮丽世界。

  1. 抱歉,wchar_t是否定义了实现,通常在 Windows 上不足以容纳亚洲脚本的完整代码点(例如)
  2. 您可以使用比较进行查找,但要对数据进行排序并将它们呈现给观众,您将需要一个完整的排序算法。例如,知道德语词典中的顺序与德语电话簿中的顺序不同(哭……)
  3. 一般来说,我建议不要自己转换字符串。Boost.Locale 算法在包装ICU时应该可以正常工作,但要避免临时操作。
  4. 如果将字符串拆分为多个部分,请不要在单词中间拆分。将一个字符一分为二太容易了(即使使用代码点感知算法,因为变音符号),或者甚至避免在两个字符之间拆分(因为某些文化将相邻字符的某些组合视为一个)。
于 2012-06-10T10:42:23.283 回答