C++中的Unicode处理

For*_*imo 103 c++ unicode

在C++中进行Unicode处理的最佳实践是什么?

haz*_*zen 78

  • 使用 ICU处理您的数据(或类似的库)
  • 在您自己的数据存储中,确保所有内容都以相同的编码存储
  • 确保你总是使用你的unicode库来完成普通的任务,比如字符串长度,大写状态等.is_alpha除非你想要的定义,否则永远不要使用标准库内置.
  • 我不能说够了:如果你关心正确性,永远不要迭代a的索引string,总是使用你的unicode库.


ees*_*ada 9

如果您不关心与以前的C++标准的向后兼容性,那么当前的C++ 11标准内置了Unicode支持:http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf

因此,在C++中进行Unicode处理的真正最佳实践是使用内置工具.然而,对于较旧的代码库,这并不总是可能的,目前标准是如此新颖.

编辑:为了澄清,C++ 11是Unicode识别的,因为它现在支持Unicode文字和Unicode字符串.但是,标准库对Unicode处理和转换的支持有限.对于您目前的需求,这可能就足够了.但是,如果您现在需要进行大量繁重的工作,那么您可能仍需要使用ICU之类的东西进行更深入的处理.有一些建议,目前的作品,包括针对不同编码之间进行文本转换更强大的支持.我的猜测(和希望)是这将成为下一份技术报告的一部分.


jsc*_*edl 8

我们公司(和其他公司)使用最初由Taligent开发的开源国际组件(ICU)库.

它处理字符串,区域设置,转换,日期/时间,整理,转换等.人.

ICU用户指南开始


Ada*_*rce 5

这是Windows编程的清单:

  • _T(“ my string”)中包含的所有字符串
  • strlen()等函数已被_tcslen()等替换。
  • 使用LPTSTR和LPCTSTR代替char *和const char *
  • 在Dev Studio中启动新项目时,请务必确保在项目属性中选择了Unicode选项。
  • 对于C ++字符串,请使用std :: wstring代替std :: string

  • 除非打算同时进行Unicode和ANSI构建,否则不要使用“ T”字符串,字符和函数。如果只打算进行Unicode构建,则只需进行常规的宽字符处理即可:L“我的宽字符串” wcslen(L“我的字符串”)等 (11认同)
  • 老实说,我认为UTF16是浪费,将UTF8中的所有编码都简化了,并且与* nix更加兼容。 (3认同)