c++ CStdioFile::WriteString 给出不正确的文件输出
Posted
技术标签:
【中文标题】c++ CStdioFile::WriteString 给出不正确的文件输出【英文标题】:c++ CStdioFile::WriteString gives incorrect file output 【发布时间】:2017-09-22 11:54:27 【问题描述】:下面的代码 sn-p 导致错误结果:
void CTesterDlg::OnClickedButtonTest()
CStdioFile myfile;
CString strLine1;
CString strLine2;
myfile.Open(_T("D:\Test1.csv"), CFile::modeWrite | CFile::modeCreate);
strLine1 = L"01001,01001,2017-09-22,09:38:18.6,Alarm,STEERING PORT A – NO DATA RECEIVED,,,,0.0,Normal,0,1,0, ,127,0\n";
strLine2 = L"Monkey, Animal\n";
myfile.WriteString(strLine2);
myfile.WriteString(strLine1);
myfile.WriteString(strLine2);
myfile.Close();
查看 Test1.csv 文件时
猴子,动物 01001,01001,2017-09-22,09:38:18.6,报警,转向口A 猴子,动物
strLine1
之后的所有内容
"..PORT A" " – NO> 收到数据,,,,0.0,Normal,0,1,0, ,127,0\n"
被删除了? 欢迎任何想法。
【问题讨论】:
我用的是 MSVS2015 SP3 C++ 请在问题中而不是在 cmets 中添加补充信息。提交后,您可以edit您的问题。 您混合使用了_T("...")
和L"..."
,这可能会或可能不会因您的构建设置而异。
【参考方案1】:
您遇到了字符串编码问题。请注意,源代码中的 –
是一个破折号(Unicode 代码点 U+2013),而不是连字符减号。将其更改为连字符减号(Unicode 代码点 U+002D),您的文本应显示在输出文件中。
【讨论】:
为了兼容 UTF-16,你必须使用CFile::typeUnicode
标志,但是你需要 UTF-16 阅读器,它不是很兼容。或者,您可以删除 CStdioFile
并使用 UTF-8,或者只是确保所有字符都是 ANSI以上是关于c++ CStdioFile::WriteString 给出不正确的文件输出的主要内容,如果未能解决你的问题,请参考以下文章
[C++]C++入门到入土篇 HelloWorld 解析 && C++入门