C+中的Unicode处理+; C++中Unicode处理的最佳实践是什么? < P>这是Windows编程的检查表: “我的字符串”中包含的所有字符串 strlen()等。函数替换为_tcslen()等 使用LPTSTR和LPCTSTR代替char*和const char* 在Dev Studio中启动新项目时,一定要确保在项目属性中选择了Unicode选项 对于C++字符串,使用STD::WString代替STD::String 用于处理数据(或类似库) 在您自己的数据存储中,确保所有内容都以相同的编码存储 请确保您始终使用unicode库执行普通任务,如字符串长度、大小写状态等。切勿使用标准库内置项,如is_alpha,除非这是您想要的定义 我说得再清楚不过了:永远不要迭代字符串的索引如果您关心正确性,请始终使用您的unicode库进行此操作。
使用IBM的查看 该问题有一个指向Microsoft Unicode文档的链接: 如果您查看该文章旁边MSDN的左侧导航栏,您会发现许多与Unicode函数相关的信息。这是“编码字符”一章的一部分() 它有以下小节:C+中的Unicode处理+; C++中Unicode处理的最佳实践是什么? < P>这是Windows编程的检查表: “我的字符串”中包含的所有字符串 strlen()等。函数替换为_tcslen()等 使用LPTSTR和LPCTSTR代替char*和const char* 在Dev Studio中启动新项目时,一定要确保在项目属性中选择了Unicode选项 对于C++字符串,使用STD::WString代替STD::String 用于处理数据(或类似库) 在您自己的数据存储中,确保所有内容都以相同的编码存储 请确保您始终使用unicode库执行普通任务,如字符串长度、大小写状态等。切勿使用标准库内置项,如is_alpha,除非这是您想要的定义 我说得再清楚不过了:永远不要迭代字符串的索引如果您关心正确性,请始终使用您的unicode库进行此操作。,c++,unicode,C++,Unicode,使用IBM的查看 该问题有一个指向Microsoft Unicode文档的链接: 如果您查看该文章旁边MSDN的左侧导航栏,您会发现许多与Unicode函数相关的信息。这是“编码字符”一章的一部分() 它有以下小节: 代码页模型 Windows中的双字节字符集 统一码 混合环境中的兼容性问题 Unicode数据转换 将基于Windows的程序迁移到Unicode 总结 我们公司(和其他公司)使用Taligent最初开发的开源(ICU)库 它处理字符串、区域设置、转换、日期/时间、排序、转换等
- 代码页模型
- Windows中的双字节字符集
- 统一码
- 混合环境中的兼容性问题
- Unicode数据转换
- 将基于Windows的程序迁移到Unicode
- 总结
从
开始,尽管这不是每个人的最佳实践,如果你愿意,你可以编写自己的C++ Unicode例程! 我刚在一个周末做完这件事。我学到了很多,虽然我不能保证它100%没有bug,但我做了很多测试,它似乎工作正常
我的代码在新的BSD许可证下,可在以下位置找到:它名为WSUCONV,附带一个示例main()程序,可在UTF-8、UTF-16和标准ASCII之间进行转换。如果你扔掉主代码,你有一个很好的读写Unicode的库。 < P>如果你不关心与以前的C++标准的向后兼容性,那么当前的C++ 11标准已经内置了Unicode支持: 因此,C++中Unicode处理的真正最佳实践是使用内置的设备。但是,对于较旧的代码库来说,这并不总是可能的,因为目前的标准非常新
编辑:澄清一下,C++11支持Unicode,因为它现在支持Unicode文本和Unicode字符串。但是,标准库仅用于Unicode处理和转换。对于您当前的需要,这可能就足够了。然而,如果您现在需要进行大量的繁重工作,那么您可能仍然需要使用类似的方法进行更深入的处理。有一些建议包括对不同编码之间的文本转换提供更强大的支持。我的猜测(和希望)是,这将是下一步的一部分。如上所述,使用大型系统时,库是最佳选择。然而,有时您确实希望自己处理一些事情(可能是因为库会使用很多资源,比如微控制器)。在这种情况下,您需要一个简单的库,可以从中复制零件以满足实际需要 Willow Schlanger的示例代码似乎是一个很好的代码(有关更多详细信息,请参见他的答案) 我还发现了另一个版本,它的代码更小,但缺少完整的错误检查,只处理UTF-8,但更容易从中取出部分 下面列出了一些看起来不错的嵌入式库 嵌入式库
- (UTF8、UTF16LE、UTF16BE、UTF32)
- (UTF8)
- (简单的UTF8库)
字符串
视为二进制数据。