在C++中进行Unicode处理的最佳实践是什么?
使用 ICU处理您的数据(或类似的库)
在您自己的数据存储中,确保所有内容都以相同的编码存储
确保你总是使用你的unicode库来完成普通的任务,比如字符串长度,大写状态等.is_alpha
除非你想要的定义,否则永远不要使用标准库内置.
我不能说够了:如果你关心正确性,永远不要迭代a的索引string
,总是使用你的unicode库.
如果您不关心与以前的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之类的东西进行更深入的处理.有一些建议,目前的作品,包括针对不同编码之间进行文本转换更强大的支持.我的猜测(和希望)是这将成为下一份技术报告的一部分.
我们公司(和其他公司)使用最初由Taligent开发的开源国际组件(ICU)库.
它处理字符串,区域设置,转换,日期/时间,整理,转换等.人.
从ICU用户指南开始
这是Windows编程的清单:
_T(“ my string”)中包含的所有字符串
strlen()等函数已被_tcslen()等替换。
使用LPTSTR和LPCTSTR代替char *和const char *
在Dev Studio中启动新项目时,请务必确保在项目属性中选择了Unicode选项。
对于C ++字符串,请使用std :: wstring代替std :: string