CFile::ReadFile,怎么判断文件是ansi的还是unicode的?

skypu 2009-03-20 02:22:42
如题

CFile theFile;
bool bRet = theFile.Read("file.htm", CFile::modeRead);
if (bRet)
{
char* szBuf = new char[theFile.Getlength()+1];
theFile.Read(szBuf, theFile.Getlength()+1);
//////////////////////////////////////////
问题来了,如果是unicode的话,这里要用的szBuf要用wchar_t*才行
那么有什么办法可以判断出unicode或者ansi的吗?
谢谢了。在线等
}
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
skypu 2009-03-20
  • 打赏
  • 举报
回复
非常感谢 downmooner
授我以渔
叶落寒山 2009-03-20
  • 打赏
  • 举报
回复
文本支持四种格式:ANSI/Unicode/Unicode big endian/UFT-8,

不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:

ANSI: 无格式定义;
Unicode: 前两个字节为FFFE;
Unicode big endian: 前两字节为FEFF;
UTF-8: 前两字节为EFBB;
downmooner 2009-03-20
  • 打赏
  • 举报
回复
打开”记事本“程序Notepad.exe,新建一个文本文件,内容就是一个”严“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

然后,用文本编辑软件UltraEdit中的”十六进制功能“,观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。

2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。

3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。

4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。
xtting_8984313 2009-03-20
  • 打赏
  • 举报
回复
多数软件是通过设置自己格式的文件头来定义使用什么编码的.还有的软件可以通过模式匹配的方式猜测使用的编码,比如word.
文件本身是不考虑编码问题的.
如果lz要让自己的软件选择编码方式,在文件的开头放个字节表示就好了.
ltc_mouse 2009-03-20
  • 打赏
  • 举报
回复
theFile.Getlength()得到是文件长度,不是字符数,你已经给了足够的buffer,按字节读就可以了啊~

读出来的buffer,要按什么格式处理,就看文件里的内容具体是怎么组织的咯

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧