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++元宇宙

[C++]C++入门到入土篇 HelloWorld 解析 && C++入门

怎么找C++函数需要的头文件?(C++头文件C++函数文档C++文档)

如何识别项目是托管 c++ 项目还是非托管 c++ 项目

C++ 程序员应该使用哪些 C++ 习语? [关闭]

十类C++标准库 十类C++标准库简介