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国际组件


推荐阅读

    linux储存命令数据?

    linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

    linux命令大全数据库?

    linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

    linux上数据库的命令?

    linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,

    linux命令dm数据库?

    linux命令dm数据库?,地址,软件,时间,设备,名字,服务,位置,名称,公司,命令,lin

    linux存储数据命令?

    linux存储数据命令?,系统,管理,数据,设备,情况,地址,工作,命令,服务,平台,Lin

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux建立数据库命令?

    linux建立数据库命令?,软件,系统,工作,数据,密码,工具,数据库,一致,网络,服

    linux命令进数据库?

    linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

    linux清空表数据命令?

    linux清空表数据命令?,系统,数据,软件,名称,不了,命令,文件,电脑,地址,位置,L

    linux拷贝数据命令?

    linux拷贝数据命令?,系统,地址,文件,数据,命令,目录,服务,基本知识,项目,密

    linux数据库检查命令?

    linux数据库检查命令?,服务,状态,地址,位置,系统,信息,命令,工作,情况,密码,

    linux命令进去数据库?

    linux命令进去数据库?,地址,服务,名字,系统,数据库,工具,基础,工作,管理,网

    linux数据库基础命令?

    linux数据库基础命令?,地址,工作,基础,系统,命令,信息,情况,工具,设备,目录,l

    linux数据共享命令?

    linux数据共享命令?,情况,系统,工具,网络,数据,软件,发行,设备,命令,文件,Lin

    命令发送数据linux?

    命令发送数据linux?,数据,地址,时间,工具,系统,设计,工作,网络,命令,综合,lin

    数据库导出命令linux?

    数据库导出命令linux?,数据,系统,名称,密码,软件,服务,情况,网上,工具,文件,L

    linux命令清空数据?

    linux命令清空数据?,服务,数据,名称,不了,百度,管理,档案,产品,命令,文件,删

    linux大数据在线命令?

    linux大数据在线命令?,工作,地址,系统,信息,管理,命令,数据,在线,目录,网络,l

    linux数据库删除命令?

    linux数据库删除命令?,软件,服务,产品,名称,系统,不了,地址,管理,电脑,命令,L