当前位置: 代码迷 >> VC/MFC >> CFile导出.csv中文乱码有关问题!
  详细解决方案

CFile导出.csv中文乱码有关问题!

热度:139   发布时间:2016-05-02 03:32:28.0
CFile导出.csv中文乱码问题!!!!
楼主的MFC是UNICODE编码,将listcontrol内容导入*.csv时出现中文乱码(英文数字正常):

CFileDialog fdlg(false,_T("*.csv"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("Excel CSV File(*.csv)|*.csv|文本文件 Text(*.txt)|*.txt|All File(*.*)|*.*||"),NULL);
if (fdlg.DoModal()==IDOK)
    {
CString filename=fdlg.GetPathName();
CFile file;    
        if (!file.Open(filename,CFile::modeCreate | CFile::modeWrite))  
        {  
            MessageBox(_T("文件此时不能打开"),_T("提示"));  
            return;  
        }    
        CString strHead = _T("编号,事件,时间,管压,机车号,备注,电池电压,设备号,电池编号,流量计采样电压\r\n");    
file.Write(strHead,wcslen(strHead)*sizeof(wchar_t));
        for (int nItem=0;nItem<m_list.GetItemCount();nItem++)  
        {  
            CString strData;  
            for (int i=0;i<10;i++)  
            {  
                strData += m_list.GetItemText(nItem,i);   
                if (9 == i)  
                {  
                    strData += _T("\r\n");
                }  
                else  
                {  
                    strData += _T(",");  
                }  
            }  
file.Write(strData,wcslen(strData)*sizeof(wchar_t));
        }            
 file.Close();
}

百度到答案:写入csv时该软件并不以unicode进行编码,因此中文乱码,于是加入了

//设置文件存储格式,否则中文为乱码
DWORD unicode=0xFEFF;
file.SeekToBegin();
file.Write(&unicode,2);

是木有乱码了没错,可是每一项不能按“,”分格存储
楼主求助!!!既要保证无乱码又要保证文件识别“,”进行分格应该怎么破!!!
------解决思路----------------------

        #include <locale.h>

setlocale(LC_ALL, "chs");
CStdioFile file(L"1.csv", CStdioFile::modeCreate 
------解决思路----------------------
 CStdioFile::modeWrite);
CString line = L"小明,数学,100,英语,95,语文,90";
file.WriteString(line + L'\n');
line = L"小红,数学,95,英语,100,语文,90";
file.WriteString(line + L'\n');
line = L"小张,数学,97,英语,98,语文,90";
file.WriteString(line + L'\n');
file.Close();