您的位置:首页 > 其它

MFC读取ANSI格式文件中的宽字符

2012-11-16 11:31 232 查看
项目中录制的文件,一直是ANSI格式的,用了很长时间没有问题,可是突然有一天,文件中出现了宽字符m。'm'本该占一个字符的,可是不知道怎么就写入了宽字符,占了两个字符,结果显示乱码,将文件格式转换为utf-8格式,是能正确显示数据的,就是说信息并没有丢失。要想读取ANSI格式中的宽字符,首先一条,数据不能丢失,就是将文件转换为utf-8或者其他Unicode格式,数据可以正确显示。但是项目中的文件是不可能让我随便修改的。所以,只有修改文件解析程序了。

折腾了很久,终于是成功了。总体思路就是,从文件中读取字符串,我用的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));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: