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()的用法。
浙公网安备 33010602011771号