CStdioFile类打开文件,用TextOut输出时乱码……

作者在实现MFC文本阅读器时遇到了中文乱码的问题,通过调整项目属性中的字符集设置并采用编码转换的方法成功解决了乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    几天前开始学习VC++(MFC)了,我很是激动,因为以前上课讲了C/C++,但是那都是些基础的运算,还没有真正的涉及到程序设计的实质性东西,现在我终于决定要学习编写一个程序了,我决定写一个小程序,文本阅读器,就像Windows的记事本一样的东西。但是一开始就遇到非常大的问题……我用MFC建立了程序框架,开始写代码,第一个代码,我决定写打开功能,也就是onFileOpen函数,但这个函数整整花了我四天时间……哎,那个累啊……

    好了,罗嗦了一大段,下面说说这个问题。

    在写onFileOpen函数是,在打开文件后,我用了CDC::TextOut函数将其输出到用户区窗口上,但是遇到一个问题,就是在输出中文的时候出现了乱码……于是,我展开了大量搜索,终于把这个问题解决了……

我的源代码如下:

void CTextReadView::OnFileOpen()
{
     // TODO: 在此添加命令处理程序代码
     CString fpathname;
     static TCHAR BASED_CODE szFilter[] = _T("文本文档(*.txt)|*.txt|")
     _T("All Files (*.*)|*.*||");
     CFileDialog  openDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL,0,TRUE); 
     if(openDlg.DoModal()==IDOK)   
     {
 
          fpathname=openDlg.GetPathName();
          CStdioFile ofile(fpathname,CFile::modeRead);
          CString ofstr;
          
          CClientDC dc(this);
          CFont font;
          font.CreatePointFont(200,_T("宋体"),NULL);
          dc.SelectObject(&font);
          TEXTMETRIC tm;
          dc.GetTextMetrics(&tm);
          CPoint pt;
          pt=0;
          while(ofile.ReadString(ofstr))
          {
               dc.TextOut(pt.x,pt.y,ofstr);
               pt.y=pt.y+tm.tmHeight;
          }
     }
}

如果就这样直接编译运行,在输出是中文会乱码,解决方法如下:

打开项目属性,修改项目属性里面的“字符集”能够解决这个问题呢,但是同时要改“公共语言运行库支持”,否则编译时会报错得……
但是这样仍然只能显示ANSI格式的文本,其他格式的文本都会不同程度的乱码……怎么办了,一位高手提供了一种解决方法,就是把其他的编码格式转化成ANSI格式,那么不就行咯,转化方法参考该大虾的博客:http://www.cppblog.com/greatws/archive/2008/08/31/60546.html

……所以,哎,我的这个问题总算是解决,感谢优快云的各位大侠们的帮助……再次感谢…………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值