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) |