ANSI、UNICODE、UTF-8 文件编码转换

来源:互联网 发布:mac war解压工具 编辑:程序博客网 时间:2024/06/10 06:01

众所周知,MFC 的 CFile、CStdioFile 是不支持 Unicode、UTF-8编码编码的读取的,但是现实中生活这样的文本文件遍地都是,如果生读的话,必然造成乱码。幸好,MS 为了解决这个问题,提供了 MultiByteToWideChar 和 WideCharToMultiByte 两个函数,可用于多字节编码和 Unicode 的转换。但是如果我们每次读取文件之后,手动去调用这两个 API 函数的话,一是麻烦,二是干扰我们正常的业务处理逻辑,违背了程序设计“强内聚,弱耦合”的原则。更别说,要调用者两个函数,在不同的工程环境“项目->属性->常规”里面,选择的编译环境 Unicode 和多字节,这两个函数的参数差异还是很大的,LPSTR  和 LPWSTR 互相转来转去。所以为了解决这个问题,站在巨人们的肩膀上,编写了一个类,继承自 CStdioFile,重载了 Open、ReadString、WriteString 三个函数,并新增获取文件编码 (Encoding、CodePage),设置新保存文件的编码等一系列函数,可以实现 ANSI/ASCII、Unicode16-BE、、Unicode16-LE、UTF-8 任意编码之间的转换,发上来纪念一下。

 

如图

 

 

PS:1、C++ 开发真是辛苦,为这些不痛不痒的小事就够折腾的;

      2、关于 Unicode 编码的更多解释,请参考官网:http://www.unicode.org/faq/utf_bom.html