解决CHttpFile类读取内容时,出现的中文乱码

今天学习MFC时,使用CHttpFile::ReadString()函数查看网页的源代码,除了英文显示正常,中文就成了乱码,好在最后解决了,在此分享下!

开始前,先把项目属性的字符集改为多字节。中文之所以乱码,是因为网页的源代码页面编码为UTF8。
就要处理下:把多字节的字符串转变为宽字符的字符串,然后设置文本显示。

请直接看代码后面打注释的部分:

void ChttpDlg::OnEnChangeEditUrl()
{
	// TODO:  如果该控件是 RICHEDIT 控件,它将不
	// 发送此通知,除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask(),
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

	// TODO:  在此添加控件通知处理程序代码

	CString strURL;
	this->GetDlgItemText(IDC_EDIT_URL, strURL);
	int length = strURL.GetLength();
	if (!strURL.IsEmpty() && strURL[length - 1] == _T('\n'))
	{
		CEdit* pURL = (CEdit*)this->GetDlgItem(IDC_EDIT_URL);
		strURL.Delete(length - 2, 2);
		if (strURL.IsEmpty())
		{
			pURL->SetSel(0, -1);
			pURL->Clear();
			return;
		}

		CInternetSession session;
		CHttpFile* httpFile;
		try
		{
			httpFile = (CHttpFile*)session.OpenURL(strURL);
			CString content, buffer;

			while (httpFile->ReadString(buffer))
			{
				content += buffer += "\r\n";
			}
			httpFile->Close();
			delete httpFile;
			session.Close();

			int wideLen = MultiByteToWideChar(CP_UTF8, 0, content, -1, NULL, 0); //得到 多字节字符串 转宽字符字符串 所需长度
			wchar_t* pWideStr = new wchar_t[wideLen];	//分配宽字符串内存大小
			if (!pWideStr)								//失败退出
			{
				MessageBox(_T("多字节转宽字符时,分配内存失败"));
				return;
			}
			MultiByteToWideChar(CP_UTF8, 0, content, -1, pWideStr, wideLen);	//开始转换
			::SetDlgItemTextW(this->m_hWnd, IDC_EDIT_CONTENT, pWideStr);		
			delete[] pWideStr;	//完事释放内存
		}
		catch (CInternetException* pException)
		{
			pException->ReportError();
			pException->Delete();
		}

		pURL->SetSel(0, -1);
		pURL->Clear();
	}
}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值