正如标题所说,我一直在尝试将用户输入 CEdit 控件的数据写入文件。
该系统是一个运行 Windows CE 的手持终端,在其中运行我的测试应用程序,我尝试输入最初显示在CListCtrl。字符在我的测试应用程序 UI 的手持显示屏上正确显示。最后,我尝试从 List 控件读回数据并将其写入文本 CSV 文件。我从控件读回的数据是正确的,但是在将其写入 CSV 时,事情变得一团糟,我的 CSV 文件不可读,并显示奇怪的符号和无意义的字母数字垃圾。
我对此进行了搜索,最后在 stackOverflow 上遇到了类似的问题: UTF-8、CString 和 CFile?(C++,MFC)
我尝试了他们的一些建议,最后得到了一个正确的 UTF-8 CSV 文件。
写入 csv 文件的代码如下所示:
CStdioFile cCsvFile = CStdioFile();
cCsvFile.Open(cFileName, CFile::modeCreate|CFile::modeWrite);
char BOM[3]={0xEF, 0xBB, 0xBF}; // Utf-8 BOM
cCsvFile.Write(BOM,3); // Write the BOM first
for(int i = 0; i < M_cDataList.GetItemCount(); i++)
{
CString cDataStr = _T("\"") + M_cDataList.GetItemText(i, 0) + _T("\",");
cDataStr += _T("\"") + M_cDataList.GetItemText(i, 1) + _T("\",");
cDataStr += _T("\"") + M_cDataList.GetItemText(i, 2) + _T("\"\r\n");
CT2CA outputString(cDataStr, CP_UTF8);
cCsvFile.Write(outputString, ::strlen(outputString));
}
cCsvFile.Close();
到目前为止还可以。现在,对于我的用例,我想稍微改变一下,使 CSV 文件编码为 Shift-JIS,而不是 UTF-8。对于 Shift-JIS,我应该使用什么 BOM,以及我应该对上述代码进行哪些更改?
感谢您的任何建议和帮助。