在Unicode下使用MFC的CFile读取有中文的文件,直接显示会显示乱码。
解决办法:使用CA2W进行转换编码即可
CFile file;
if (file.Open(m_pDoc->m_strFilePath, CFile::modeRead))
{
int nLen = (int)file.GetLength();
char * szDate = new char[nLen + 1];
file.Read(szDate, nLen);
szDate[nLen] = '\0';
//用CA2W 转换格式
CString strbuf = CA2W(szDate, CP_UTF8);
m_editShowFile.SetWindowText(strbuf);
file.Close();
delete[] szDate;
}
关于编码转换的补充:
字符串的ASCII和UNICODE之间的转换
(1) Win32提供了API函数MultiByteToWideChar和WideCharToMultiByte来提供这种功能。
(2) ATL还提供了另一套转换宏——CA2W、CA2T、CA2WEX、CA2CT、CW2T、CW2A、CW2AWX
CW2A将宽字符集(Unicode)转化为多字符集(ASCII)
CA2W就是将多字符集(ASCII)转化为宽字符集(Unicode)
头文件:#include <atlstr.h>
注意要利用USES_CONVERSION提前进行声明。
C: convert 转换
W: wide 广泛的
2: to 到
A ASCII; ASCII码