MFC 读取文件在EditControl显示是乱码,怎么解决
详细代码:CStringfilename;//打开的文件名字符串CFilefile;//文件对象DWORDlen;//用于保存文件长度CFileDialogdlg(TRU...
详细代码:
CString filename; // 打开的文件名字符串
CFile file; // 文件对象
DWORD len; // 用于保存文件长度
CFileDialog dlg(TRUE,_T(""),_T("*.*"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("*.*|*.*|"));
DWORD local_1 = dlg.DoModal ();
if(IDOK== local_1){
filename = dlg.GetPathName();
}
else if( IDCANCEL == local_1){
return ;
}
// 读取数据
file.Open(filename,CFile::modeReadWrite);
len = file.GetLength();
char *pReadData = new char[len+1]; // 分配内存
file.Read(pReadData,len); // 这里保存的读取文件的数据
pReadData[len] = 0;
CString data(pReadData);
file.Close();
CEdit* pBoxOne;
pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1);
pBoxOne -> SetWindowText(data ); 展开
CString filename; // 打开的文件名字符串
CFile file; // 文件对象
DWORD len; // 用于保存文件长度
CFileDialog dlg(TRUE,_T(""),_T("*.*"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("*.*|*.*|"));
DWORD local_1 = dlg.DoModal ();
if(IDOK== local_1){
filename = dlg.GetPathName();
}
else if( IDCANCEL == local_1){
return ;
}
// 读取数据
file.Open(filename,CFile::modeReadWrite);
len = file.GetLength();
char *pReadData = new char[len+1]; // 分配内存
file.Read(pReadData,len); // 这里保存的读取文件的数据
pReadData[len] = 0;
CString data(pReadData);
file.Close();
CEdit* pBoxOne;
pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1);
pBoxOne -> SetWindowText(data ); 展开
1个回答
展开全部
你先看看你的Visual Studio是什么版本的,如果不是VC6的话那么生成的项目默认是使用UNICODE编码,但是你在读取文件的时候读取的是ANSI的文本,直接设置到editbox所以就出现乱码了。如果是这个原因的话,你在SetWindowText的时候使用SetWindowTextA函数,强迫使用ANSI格式
::SetWindowTextA(pBoxOn->m_hWnd, data);
::SetWindowTextA(pBoxOn->m_hWnd, data);
追问
追答
关于写入的文件只有一部分以及汉字乱码的问题实际上都是UNICODE造成的,因为你从EDIT里面获取的CString是UNICODE的,所以写入的文本也是unicode的,一个unicode占2个字节,假如你一个文件本来100个字符,你写的时候写100个字节(这是你的len=str.GetLenght()获取的字符数),实际上只写了50个字符,所以看上去就只有前面一部分了,而对于unicode的汉字使用ansi方式来打开的话自然就是乱码了(因为没有写如uncode文本头,所以notepad默认使用ansi方式打开)。
解决的方法还是可以使用windows的ansi API.
至于你说的不换行的问题,我没有碰到,暂时不知道原因,不过你可以参考下我附件的完整代码看看哪儿不一样。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询