为什么打开Text文件时,中文显示会变乱码,能帮我解答者,高分答谢。

wolfasp 2003-08-02 02:38:52
我的程序是用基类CRichEditView生成的多文档编辑器,当然用CEditView作基类时没事,以下是我 用来读文件的代码:
CFile* pFile = ar.GetFile();
ASSERT(pFile->GetPosition() == 0);
DWORD nFileSize = pFile->GetLength();
ar.Read((LPVOID)str.GetBuffer(nFileSize), nFileSize/sizeof(TCHAR));
wndRich.SetWindowText(str);
能给我解决者,将高分答谢
...全文
492 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolfphp 2003-09-14
  • 打赏
  • 举报
回复
up
wolfasp 2003-09-14
  • 打赏
  • 举报
回复
up
laodie 2003-08-08
  • 打赏
  • 举报
回复
试试:

if(!file.Open(m_strFileName,CFile::modeRead))
{
return;
}
char buf[1024]; //FileSize,exam
file.ReadString(buf,1023);
wndRich.SetWindowText(buf);
file.Close();

wolfasp 2003-08-07
  • 打赏
  • 举报
回复
在2000与xp下都可以运行,可能是riched.dll,riched20.dll,riched32.dll其中的问题
wolfasp 2003-08-06
  • 打赏
  • 举报
回复
真是惨,到现在都还没有解决,我想是不是CRichEditView的问题。
wolfasp 2003-08-05
  • 打赏
  • 举报
回复
难道就没有人遇到类似的问题吗?
fuq0 2003-08-04
  • 打赏
  • 举报
回复
gz
BuZhang_AP97091 2003-08-04
  • 打赏
  • 举报
回复
稍改一下程序,把缓冲区赋值分开出来,
然后跟踪一下程序,看是否有正确读取,
再看显示时数据的变化,找出问题的所在。
自己找解决办法是最现实的,别人除非也做这个,否则无法给你十分具体的处理建议。
wolfasp 2003-08-04
  • 打赏
  • 举报
回复
以上方法都不行,还有谁能帮我提出更好的解决办法啊。
yxl2000 2003-08-04
  • 打赏
  • 举报
回复
可能是读取字符的一半产生的乱码;
我这有一个程序,你看一下有没有帮助
CString str;
int line=0;
int m_f=0;
char ch=0;
myfile.Open(m_strFileName,CFile::modeRead);

while(myfile.Read((void *)&ch,1)!=0)
{
if(ch!=0x0d)
{
if(ch!=0x09)
{
str+=ch;
}
else {m_set.AddNew();
m_set.m_stime=str;
m_ListResult.InsertItem(line,str);
str.Empty();
// continue;
}
goodboyws 2003-08-04
  • 打赏
  • 举报
回复
DWORD nFileSize = pFile->GetLength()+16;??
最好别用CString,直接用char*
wolfasp 2003-08-04
  • 打赏
  • 举报
回复
试过了,不行,我想主要的问题是这里
CFile* pFile = ar.GetFile();
ASSERT(pFile->GetPosition() == 0);
DWORD nFileSize = pFile->GetLength();
ar.Read((LPVOID)str.GetBuffer(nFileSize), nFileSize/sizeof(TCHAR));
wndRich.SetWindowText(str);
我修改过几次,都不行啊
laserzxq 2003-08-04
  • 打赏
  • 举报
回复
不会是你的字体设的不对吧?设成中文字体看看,比如'宋体'
wolfasp 2003-08-04
  • 打赏
  • 举报
回复
跟踪到的显示没有错,但显示在编辑框中就有错啊
wolfasp 2003-08-02
  • 打赏
  • 举报
回复
整个函数如下,有谁能帮我修改一下,
void CEmpDoc::Serialize(CArchive& ar)
{
CEmpView* pView = (CEmpView*)m_viewList.GetHead();
ASSERT_VALID(pView);
ASSERT_KINDOF(CEmpView, pView);

CRichEditCtrl& wndRich = pView->GetRichEditCtrl();
CString str;

//Write/Read raw data from file to/from RichEditControl
if (ar.IsStoring()) {
wndRich.GetWindowText(str);
ar.Write((LPVOID)(LPCTSTR)str, str.GetLength()*sizeof(TCHAR));
}

else
{ CFile* pFile = ar.GetFile();

ASSERT(pFile->GetPosition() == 0);
DWORD nFileSize = pFile->GetLength()+16;
ar.Read((LPVOID)str.GetBuffer(nFileSize), nFileSize/sizeof(TCHAR));
wndRich.SetWindowText(str);
// str+=str;
}

ASSERT_VALID(this);
}
wolfasp 2003-08-02
  • 打赏
  • 举报
回复
canoe_eyes(阿里) 我照你所说的方法试过,不行啊,你能否给我一个完整的回答,我将感激不尽。
canoe_eyes 2003-08-02
  • 打赏
  • 举报
回复
出现乱码的原因其实很简单,你每次读的只是一半字,把它们加一下就OK了,(str += str; )
triout 2003-08-02
  • 打赏
  • 举报
回复
可能是你的TEXT文本的问题。
我也遇到类似的问题,百思不得其解,最后无意间换了一个TXT文件,中文显示正确。建议你多换一些TXT文件检测,最好是OS自带的TXT文件。
crystal_heart 2003-08-02
  • 打赏
  • 举报
回复
up
dutzhp 2003-08-02
  • 打赏
  • 举报
回复
filename为要打开的文件名,strFileCore就是文件内容

CFile file;
if(!file.Open(filename, CFile::modeRead | CFile::shareDenyWrite))
{
strFileCore="";
return;
}
int len=file.GetLength();
CByteArray m_baFile;
m_baFile.SetSize(len);
file.ReadHuge(m_baFile.GetData(),len);
file.Close();
BYTE* buf=m_baFile.GetData();
memcpy(strFileCore.GetBufferSetLength(len),buf,len);
m_baFile.RemoveAll();
加载更多回复(1)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧