MFC读取ANSI格式文件中的宽字符
2012-11-16 11:31
232 查看
项目中录制的文件,一直是ANSI格式的,用了很长时间没有问题,可是突然有一天,文件中出现了宽字符m。'm'本该占一个字符的,可是不知道怎么就写入了宽字符,占了两个字符,结果显示乱码,将文件格式转换为utf-8格式,是能正确显示数据的,就是说信息并没有丢失。要想读取ANSI格式中的宽字符,首先一条,数据不能丢失,就是将文件转换为utf-8或者其他Unicode格式,数据可以正确显示。但是项目中的文件是不可能让我随便修改的。所以,只有修改文件解析程序了。
折腾了很久,终于是成功了。总体思路就是,从文件中读取字符串,我用的CStdioFile的ReadString方法,一次读取一行,然后遍历字符串,如发现一个字符是宽字符的开头,就将它本身及其后面的字符合并,转换为一个字符。贴代码:
折腾了很久,终于是成功了。总体思路就是,从文件中读取字符串,我用的CStdioFile的ReadString方法,一次读取一行,然后遍历字符串,如发现一个字符是宽字符的开头,就将它本身及其后面的字符合并,转换为一个字符。贴代码:
void CheckWideChar(CString strMetaLine, CString &strSuit) { CHAR pbuf[4] = {NULL}; // 2 is enough TCHAR tWideChar = _T(''); UINT uLen = strMetaLine.GetLength(); for (int n=0; n < uLen; ++n) { if (IsDBCSLeadByte(strMetaLine )) { pbuf[0] = strMetaLine.GetAt(n); if (n+1 < uLen) { pbuf[1] = strMetaLine.GetAt(++n); } MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pbuf, strlen(pbuf), &tWideChar, sizeof(pbuf) / sizeof(pbuf[0])); strSuit.AppendChar(tWideChar); } else { strSuit.AppendChar(strMetaLine.GetAt(n)); } } }
相关文章推荐
- MFC 读取文件的每一行的字符
- Qt读取ANSI格式文件——利用QTextCodec将其他编码格式的QByteArray转换为Unicode格式,或者从文件中读出后直接做转换
- 在VS2010中利用MFC读取word、ppt、excel格式文件
- inputStreamReader bufferedReader File 读取文件 解决字符格式问题 UTF-8 GBK
- Qt读取ANSI格式文件——利用QTextCodec将其他编码格式转换为Unicode格式
- Qt读取ANSI格式文件——利用QTextCodec将其他编码格式转换为Unicode格式
- VS2010中用MFC读取word、ppt、excel格式文件
- 结构体内部偏移的妙用 从文件中按照固定格式读取数据
- 读取CSV格式文件
- FIT文件格式解析及MATLAB读取程序
- 读取DXF格式文件的C++代码
- 读取clob格式文件
- FIT文件格式解析及MATLAB读取程序
- java学习笔记_将中文字符导出txt文档_从txt文档读取文件
- opencv支持多种流行视频格式文件的读取
- 【转】用oledb读取dbf文件报错--“外部表不是预期的格式” [
- vba中读取utf-8格式的csv文件保证不乱码
- 处理EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的数据截断
- osg MFC 读取文件显示 的例子osgviewerMFC
- verilog读取的二进制与十六进制文件的格式问题