C ++中的Unicode处理

C ++中的Unicode处理

Unicode Processing in C++

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


  • 使用ICU处理您的数据(或类似的库)
  • 在您自己的数据存储中,确保所有内容都以相同的编码存储
  • 确保您始终将unicode库用于诸如字符串长度,大写状态等平凡的任务。切勿使用is_alpha之类的标准库内置函数,除非这是您想要的定义。
  • 我说的不够多:如果您关心正确性,请不要迭代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最初开发的开放源代码的Unicode国际组件(ICU)库。

它处理字符串,语言环境,转换,日期/时间,排序规则,转换等。等

从ICU用户指南开始


这是Windows编程的清单:

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

看着
C ++中不区分大小写的字符串比较

该问题具有指向Unicode的Microsoft文档的链接:http://msdn.microsoft.com/zh-cn/library/cc194799.aspx

如果您查看该文章旁边MSDN的左侧导航栏,则应该找到许多与Unicode函数有关的信息。它是"编码字符"一章的一部分(http://msdn.microsoft.com/zh-cn/library/cc194786.aspx)

它包含以下小节:

  • 代码页模型
  • Windows中的双字节字符集
  • 统一码
  • 混合环境中的兼容性问题
  • Unicode数据转换
  • 将基于Windows的程序迁移到Unicode
  • 摘要

尽管这可能并不是每个人的最佳做法,但如果需要,您可以编写自己的C ++ UNICODE例程!

我刚刚完成了一个周末。我学到了很多东西,尽管我不能保证它是100%无缺陷的,但是我做了很多测试,而且看来工作正常。

我的代码在New BSD许可下,可以在这里找到:

http://code.google.com/p/netwidecc/downloads/list

它称为WSUCONV,并带有一个示例main()程序,该程序在UTF-8,UTF-16和标准ASCII之间进行转换。如果您丢弃主代码,那么您将拥有一个不错的读写UNICODE的库。


如上所述,使用大型系统时,最好的选择是库。但是有时候您确实想处理自己的事情(可能是因为该库将使用微控制器上的许多资源)。在这种情况下,您需要一个简单的库,可以将其中的零件复制出实际需要的东西。

Willow Schlanger的示例代码似乎是一个不错的代码(有关更多详细信息,请参见他的答案)。

我还发现了另一个代码较小的代码,但是缺少完整的错误检查功能,仅处理UTF-8,但拆装起来更简单。

这是看起来不错的嵌入式库的列表。

嵌入式库

  • http://code.google.com/p/netwidecc/downloads/list(UTF8、UTF16LE、UTF16BE、UTF32)
  • http://www.cprogramming.com/tutorial/unicode.html(UTF8)
  • http://utfcpp.sourceforge.net/(简单的UTF8库)

看看UTF-8 Everywhere的建议


使用IBM的Unicode国际组件


推荐阅读