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 );
展开
 我来答
花花浪客
2013-10-29 · TA获得超过2069个赞
知道小有建树答主
回答量:792
采纳率:100%
帮助的人:706万
展开全部
你先看看你的Visual Studio是什么版本的,如果不是VC6的话那么生成的项目默认是使用UNICODE编码,但是你在读取文件的时候读取的是ANSI的文本,直接设置到editbox所以就出现乱码了。如果是这个原因的话,你在SetWindowText的时候使用SetWindowTextA函数,强迫使用ANSI格式
::SetWindowTextA(pBoxOn->m_hWnd, data);
追问

这个问题已经解决了。谢谢。但又有新的问题,能不能帮忙解决一下。

读取Edit Control的内容写到文件中,如果是打开的文件内容,写入文件后不换行,而且只能写入前面一部分。如果是自己输入的内容,只能读取第一行,而且汉字是乱码。代码如下:

追答

关于写入的文件只有一部分以及汉字乱码的问题实际上都是UNICODE造成的,因为你从EDIT里面获取的CString是UNICODE的,所以写入的文本也是unicode的,一个unicode占2个字节,假如你一个文件本来100个字符,你写的时候写100个字节(这是你的len=str.GetLenght()获取的字符数),实际上只写了50个字符,所以看上去就只有前面一部分了,而对于unicode的汉字使用ansi方式来打开的话自然就是乱码了(因为没有写如uncode文本头,所以notepad默认使用ansi方式打开)。

解决的方法还是可以使用windows的ansi API.

至于你说的不换行的问题,我没有碰到,暂时不知道原因,不过你可以参考下我附件的完整代码看看哪儿不一样。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式