【原创】MBCS,Unicode,UTF8以及一个用C++读写UTF8文件的工具类

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

     代码下载

你可能感兴趣的:(【原创】MBCS,Unicode,UTF8以及一个用C++读写UTF8文件的工具类)