Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49080
  • 博文数量: 8
  • 博客积分: 363
  • 博客等级: 一等列兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-21 09:59
文章分类
文章存档

2011年(1)

2010年(2)

2009年(1)

2008年(4)

我的朋友

分类: C/C++

2009-06-19 11:18:16

ok,开始。
最近项目需要,本人负责视频字幕编辑这块,利用directshow先编码实现载入一段视频。
关于视频开发本人就不讲了,因为在读取文件时出现了乱码,还弄了我半天时间。
我从txt文件读取到richEdit上出现了乱码。
第一种方法:是在项目属性->常规中直接把uincode字符集改为多字符集。
第二种方法:
先读取文件
CFile cf;
CString str;
cf.Open(CFileDlg.GetPathName(),CFile::modeReadWrite);
cf.Read(str.GetBuffer(),cf.GetLength());
利用MultiByteToWideChar函数,先算出要转换的字符数
DWORD dwNum=MultiByteToWideChar(CP_ACP,0,(LPCSTR)(LPCTSTR)str,-1,NULL,0);
然后再进行真正的转换
wchar_t *pwText = new wchar_t[dwNum+1];
memset(pwText,0,dwNum+1);
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)(LPCTSTR)str, -1,pwText, dwNum+1);
然后显示
GetDlgItem(IDC_RICHEDIT)->SetWindowText(pwText);
乱码是解决了,但是文章末尾还是乱码。
于是加了一句 pwText[dwNum]='\0'; 
 
奇怪,怎么末尾还是乱码呢?
看了文本这么字符数没有程序里的dwNum多啊,原来是在MultiByteToWideChar函数之前就已经存在乱码了。原来是字符串str初始化问题,于是就改成
   int len=cf.GetLength();
   wchar_t* str=new wchar_t[len+1];
   memset(str,0,len+1);
   cf.Read(str,len);
把str多余的乱码清楚了。
 
 
 
 
阅读(8170) | 评论(0) | 转发(0) |
0

上一篇:开发团队

下一篇:关于进程与线程

给主人留下些什么吧!~~