当前位置:主页   - 电脑 - 程序设计 - C/C++
UCS-2与UTF8之间的选择(2)--Unicode组织提供的C/C++的Unicode编码转换函数
来源:网络   作者:九天雁翎   更新时间:2011-07-17
收藏此页】    【字号    】    【打印】    【关闭

  这里我大概搜索到了3个库,一个是Unicode组织自己提供的,一个是IBM做的开源ICU工程中的,一个是开源的UCData 2.9。

  但是UCData2.9中并没有UTF-16,通篇都是为UTF-32设计的,属于那种将来可能会用的到的库,因为目前Windows与Linux的内核都还没有UTF-32化,注定假如使用UTF-32将会在两个地方都失去性能优势。

  于是剩下的两个选择就很有意思了,一个是Unicode自己提供的那几个简单的转换函数,一个是IBM提供的一个巨无霸的库,一个Unicode的相关库到了10M的确算是很夸张的了,难怪被别人称作蓝色巨人,干什么都是大手笔,就像它出品的软件工程软件一样,哪一个都是出手不凡,一出一个系列,每个都大的要命。感叹。

  从C/C++的库的角度,我就只查看这两个了。

  Unicode组织的函数:(甚至不能称作库)

  这些函数很好用,并且自带了测试套件。

  在windows中,新建一个空的工程,并将ConvertUTF.h,CVTUTF7.h,CVTUTF7.C,harness.c添加到工程中,编译,运行,既可以运行测试例程,utf7这个我们一般用不上,其实也可以不添加。在我的VS2005 SP1中,运行结果如下:

Three tests of round-trip conversions will be performed.
One test of illegal UTF-32 will be peroformed.
Two illegal result messages are expected; one in test 02A; one in test 03A.
These are for tests of Surrogate conversion.
 
Begin Test01
******** Test01 succeeded without error. ********
 
Begin Test02
Test02A for 55296, input 0000d800, output 0000,0000, result 3
!!! Test02A: note expected illegal result for 0x0000D800
******** Test02 succeeded without error. ********
 
Begin Test03
sourceIllegal   Test03A for 55296 (0xd800); output ; result 3
!!! Test03A: note expected illegal result for 0x0000D800
******** Test03 succeeded without error. ********
 
Begin Test04
******** Test04 succeeded without error. ********

编缉推荐阅读以下文章

  • UCS-2与UTF8之间的选择(4)--linux中各编码字符串的C/C++输出支持及方式比较
  • UCS-2与UTF8之间的选择(3)--windows与linux中各编码字符串的C/C++输出支持及方式比较
  • UCS-2与UTF8之间的选择(1)--序
其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明