中文乱码问题

    在使用richEdit控件读取中文文本时 出现乱码现象,

 

    究其原因是:使用CFile::Read 读取的是ASCII 码,而vs使用的是UNICODE

 

所以需要对其进行转换,代码如下:

 

    其中,MultiByteToWideChar(CP_ACP,0,read,num,wword,num); 中第一个num为read数组中的字节数(BYTE),此字节数通过,CFile::GetLength()获得。

 

    CFile::GetLength()得到的是字节数不是字数,与 CString::GetLength()不同,CString::GetLength()得到的是字数,而不是字节数。

    如:“你好,ME”  字数为5,字节数为7

 

    当使用CFile::GetLength()从文件中获得时,其长度为7,表示文件共有7个字节(BYTE)组成

 

    当 CString str=“你好,ME”;  str.GetLength() 其值为5,表示  str字符串由5个字组成,分别是'你、好、,、M、E'

   

 

 

 

CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,L"All Files(*.*)|*.*||"); CString strPath,strText=L""; if (FileDlg.DoModal()==IDOK) { strPath=dlgFile.GetFileName(); } CFile file(strPath,CFile::modeRead|CFile::typeBinary); char read[1000]; file.Read(read,1000); //读取文件后,read并没有在文件末尾以/0作为结束 //DWORD num=MultiByteToWideChar(CP_ACP,0,read,-1,NULL,0);// 不要使用这个NUM 否则出错 int num=file.GetLength(); // 使用这个文件长度 WCHAR *wword; wword=(WCHAR*)calloc(num,sizeof(WCHAR)); if (wword==NULL) { free(wword); } memset(wword,0,num*sizeof(WCHAR)); MultiByteToWideChar(CP_ACP,0,read,num,wword,num); // 注意确定文件长度 for (int i=0;i<num;i++) { strText+=wword[i]; } file.Close(); free(wword); m_RichEdit.SetWindowText(strText);

你可能感兴趣的:(中文乱码问题)