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

项目中录制的文件,一直是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[n]))
		{
			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));
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值