博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

关于读写文件与文件流的字符集(GJJie)

Posted on 2012-03-05 19:55  MAPZONE  阅读(534)  评论(1)    收藏  举报

1.如果要打开的文件有的字符集是ANSI有的是Unicode,这时如果你要读取文件流,那么在fread(void* buffer, size_t size, size_t count, FILE*stream); 时你的buffer定义的时候定义为wchar_t*还是定义为char*呢,有一个函数可以将文件流统统转为Unicode,这样就不必为文件流是什么而费心了。

函数是fopen_s(FILE** pFile,  const char *filename,  const char *mode)

fopen_s(FILE** pFile,  const char *filename,  const char *mode)


或者

_wfopen_s(FILE** pFile,const wchar_t *filename,  const wchar_t *mode );

做法是:

fopen_s(&fp, "newfile.txt", "r, ccs=UNICODE");

注意在第三个参数有一个"ccs=UNICODE",这就是将文件流转为Unicode的方法,无论原来是ANSI还是Unicode,这样你可以用char*定义你的buffer(不要用wchar_t*,因为这样定义如果文件流是ANSI读出来的是乱码)。但是如果不这样做,如果你遇到Unicode的文件流,但buffer仍然定义为char*,那么你将不能得到正确的字符串。有不清楚的可以参阅msdn上fopen_s()的用法。