使用UTF8

时间:2012-06-10 10:14:13

标签: c++ string boost locale utf

使用std :: string和UTF8似乎是一个相当复杂的问题,我无法找到对do和dt的良好解释。

如何在C ++中正确使用UTF8?这很令人困惑。

我找到了boost::locale并设置了全局区域设置:

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

然而,在此之后我需要考虑什么,何时才能遇到问题?将文件写入/读取按预期工作,字符串比较等...?

到目前为止,我知道以下内容:

  • std::regex / boost::regex不起作用,需要覆盖广泛的字符串并使用wregex。
  • boost::algorithm::to_upper无法使用,需要使用boost::locale::to_upper

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

1 个答案:

答案 0 :(得分:3)

欢迎来到宏伟的Unicode世界。

  1. 抱歉,wchar_t是实现定义的,通常在Windows上不足以保存亚洲脚本的完整代码点(例如)
  2. 您可以使用比较进行查找,但要对数据进行排序并将其呈现给受众群体,您需要full collation algorithm。例如,知道德语词典中的顺序与德语电话簿中的顺序不同(并且哭...)
  3. 一般来说,我建议不要自己改变字符串。 Boost.Locale算法应该在它们包装ICU时一般工作,但是否则不要进行临时操作。
  4. 如果将字符串分成几个部分,请不要在单词的中间分割。将字符分成两部分(即使使用代码点感知算法,因为变音符号),或者甚至避免使用,将两个字符分开(因为某些文化认为相邻字符的某些组合为一个),这太容易了。