随笔 - 49  文章 - 2  评论 - 382 
    其他的没什么好说的,直接看代码即可,唯一一个需要说明的是,C++中常用的三种字符编码:MBCS,Unicode,UTF8,新手一般会在这个问题上犯糊涂。
    MBCS是变长字节编码,具体的编码由操作系统确定,实际上是操作系统的内码。如在简体中文操作系统中,其编码是GB18030(GB2312的超集);在繁体中文操作系统中,其编码是BIG5。对于GB18030,其英文字符编码与ASCII码值相同,用单字节编码,中文字符则用双字节编码,其值为字符对应的区位码值。
    Unicode是双字节编码。其英文字符编码也与ASCII码值相同。不同之处在于,即使英文字符也用双字节表示,其第一个字节值为0,第二个字节为对应的ASCII码值。对于汉字,与GB18030的不同之处在于,相同汉字的编码值不同,不是汉字的区位码值,而是Unicode编码值。
    UTF8也是变长字节编码。其英文字符编码也与ASCII码值相同,但只用一个字节编码;对于汉字等字符,则用两个字节编码。与GB18030的不同之处在于,其汉字的编码值不同。与Unicode的不同之处在于,不是用两个字节表示英文字符,而只用一个。同一个汉字在Unicode和UTF8中的值是否相同,由于笔者既没有查看编码规范,也没有实验验证过,并不知晓。
    从以上的说明可以看出,存储一个相同的中英文混合的文本文件,MBCS和UTF8编码的文件要比Unicode编码的文件小,这是因为前两者对英文字符都使用单字节编码,更节省空间的缘故。实验中还发现,MBCS比UTF8文件的大小要稍小,笔者懒惰,并没有去查究原因。当前的大量网页都采用UTF8编码而不是Unicode编码,估计文件大小也是考虑的因素之一。
    在计算机对这三种文字编码的处理效率上,Unicode编码要比MBCS和UTF8编码的效率高。这是因为Unicode是定长编码,在处理过程中不需要判断下一个字符的开始位置,因而处理效率高。在C++中,如果开启Unicode编码,则程序中的所有字符就是Unicode编码。如果需要保存为UTF8编码,必须手工处理。除了C++,我知道的ruby语言默认的也是使用Unicode编码。
    附件是C++中读写UTF8文件的工具类。想当初我在互联网上到处寻找读写UTF8的C++方法,遍寻不得,希望能够给后来人给予帮助。附件中的CDirectory类是我在项目中使用的文件夹操作函数。

    代码下载

红马天下 版权所有
博客:http://homer.cnblogs.com/
欢迎转载,但转载必须注明作者和出处。

posted on 2008-06-21 17:05 红马天下 阅读(511) 评论(1)  编辑 收藏 所属分类: C++

  回复  引用    
2008-09-05 07:56 | ximh [未注册用户]
能交流一下么?
我使用vc++6.0 oracle,因为在vc中的unicode需要转换,所以有些小问题想请教。
希望能回信
ximhilim@gmail.com

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接:

历史上的今天:
2005-06-21 实习求职