我的工程是Unicode的,用CStdioFile读ANSI文件,中文是乱码,这个问题可以用
http://zongtongyi.blogbus.com/logs/8372306.html
这个链接的内容解决,但是,仍然不能解决Unicode工程读Unicode文件,读不正确的问题。
连乱码都不是,我看内存是,老是0在前,所以CString直接判断字符串就为空了。
不要直接贴一个MultiByteToWideChar之类的函数,这个是解决Unicode与ANSI之间转换的,但
Unicode工程读Unicode文件,是Unicode把Unicode文件当ANSI文件读了,其中已经用了一次MultiByteToWideChar函数
http://zongtongyi.blogbus.com/logs/8372306.html
这个链接的内容解决,但是,仍然不能解决Unicode工程读Unicode文件,读不正确的问题。
连乱码都不是,我看内存是,老是0在前,所以CString直接判断字符串就为空了。
不要直接贴一个MultiByteToWideChar之类的函数,这个是解决Unicode与ANSI之间转换的,但
Unicode工程读Unicode文件,是Unicode把Unicode文件当ANSI文件读了,其中已经用了一次MultiByteToWideChar函数
既然文件前面有不少的0,就不能用字符串的方式去访问
可以参考一下:http://blog.csdn.net/JIGSONG/archive/2010/12/09/6066523.aspx最好在UNICODE环境中直接申请char型变量,然后使用常用的函数做转换,这样系统会做好内部处理。
CStdioFile内部使用CRT代码来读写文件,因此如果出现你所说的问题,例如它内部自动转换等操作,你可以显式的使用_set_fmode(_O_WTEXT/_O_TEXT/_O_BINARY);等告诉它我只需要按UNICODE/ANSI/二进制方式工作,不需要你自作主张。
http://blog.csdn.net/jun_01/archive/2005/07/28/437612.aspx
char chr[100];
ZeroMemory(chr, 100);
m_f.Read((LPTSTR)chr, 99);
TCHAR tchr[50];
MultiByteToWideChar( CP_ACP, 0, chr,
-1, tchr,
sizeof(tchr)/sizeof(tchr[0]) );
AfxMessageBox(tchr);
{
// char chr[100];
// ZeroMemory(chr, 100);
TCHAR tchr[50];
ZeroMemory(tchr, 50*sizeof(TCHAR));
m_f.Read(tchr, 50);
AfxMessageBox(tchr);
return;
}else{
// CString strText;
// m_f.ReadString(strText);
//strText.Format(_T("%s"), (LPTSTR)achr);
char chr[100];
ZeroMemory(chr, 100);
m_f.Read((LPTSTR)chr, 99);
TCHAR tchr[50];
MultiByteToWideChar( CP_ACP, 0, chr,
-1, tchr,
sizeof(tchr)/sizeof(tchr[0]) );
/*sizeof(tchr)/sizeof(tchr[0]) 这个算出来是50,也就是TCHAR tchr[50];这儿申明的大小*/
AfxMessageBox(tchr);
return;
}