2012-04-19 20:07112 人阅读评论(0)收藏举报 VC ANSI 环境下按行读取ANSI、UNICODE 、UNICODE big en dian 、UTF-8 四种文本文件 1
问题提出 MFC 提供的文件类 CStdioFile,其中一个函数 ReadString 实现了文件的按行读取,但是不能满足不同类型的文本文件的按行读取,为了解决这一问题,笔者初步研究了一些编码知识,参考了网上的一些资料,实现了 CStdioFile 类的扩展类 CStdioFileEx,完成了常见文本文件的按行读取(注明:不包括 DOC、PDF 等其他形式的文档)
在此对网上分享编码经验的网友表示感谢,同时由于我编写的类还未经过严格测试,如有错误或方法过于复杂敬请各位指正
问题解决 (1)四种常见文本文件编码方式研究 ANSI、UNICODE 、UNICODE big en dian 、UTF-8 四种格式编码存在差别,简要介绍如下: ANSI 编码: 无文件头(文件编码开头标志性字节) ANSI 编码字母数字占一个字节,汉字占两个字节, 回车换行符单字节 十六进制表示为 0d 0a UNICODE 编码: 文件头,十六进制表示为 FF FE 每一个字符都用两个字节编码 回车换行符 双字节 000d 000a Unicode big endian 编码: 文件头十六进制表示为 FE FF , 后面编码是把字符的高位放在前面,低位放在后面,正好和 Unicode 编码颠倒
回车换行符,双字节,十六进制表示为 0d00 0a00 UTF-8 编码: 文件头,十六进制表示为 EF BB BF
UTF-8 是 Unicode 的一种变长字符编码,数字、字母、回车、换行都用一个字节表示,汉字占 3 个字节
回车换行符,单字节,十六进制表示为 0d 0a 以中文"你好"二字为例