【问题标题】:How to write Special characters in a file using mfc application?如何使用 mfc 应用程序在文件中写入特殊字符?
【发布时间】:2014-03-10 12:16:47
【问题描述】:

我想写像ô这样的特殊字符。 ö,`a¹½^ 在一个文件中。我在 MFC 中工作并使用 UNICODE 字符集。虽然在消息框中显示字符串运行良好,但它没有将字符写入文件。

这是我的部分代码:

CString abc=_T("hello");
CString xyz=compress(abc); //compressing value and return special characters
CStdioFile file_object(_T("abc.txt"),CFile::modeCreate|CFile::modeWrite);
file_object.WriteString(xyz);

【问题讨论】:

  • 你做了什么没用?给我们看codez! :)
  • 我正在使用一个 CString 变量,比如 CString =_T("hello");并压缩它返回一个带有特殊字符的值,如上所示,最后我想将该字符串写入文本文件。
  • 正常字符运行良好,但当特殊字符开始时它停止写入文件。
  • 您是如何打开文件并写入文件的?请编辑将您的代码放在那里的问题。请!我对您打开的文件类型(文本或二进制)有一些猜测,但在看到您的代码之前无法确定。
  • 实际上我的代码很大,但我想简短地解释一下.. CString abc=_T("hello"); CString xyz=压缩(abc); //压缩字符串abc并返回特殊字符abc=abc+xyz; CStdioFile file_object(_T("abc.txt"),CFile::modeCreate|CFile::modeWrite); file_object.WriteString(abc); file_object.Close();

标签: c++ file visual-c++ mfc


【解决方案1】:

CStdioFile 类似乎不直接支持 Unicode 字符。您可以使用此解决方法(来自this CodeProject 文章)

// Open the file with the specified encoding
FILE *fStream;
errno_t e = _tfopen_s(&fStream, _T("abc.txt"), _T("wt,ccs=UTF-8"));
if (e != 0) return; // failed..
CStdioFile f(fStream);  // open the file from this stream

f.WriteString(xyz);
f.Close();

//
// For Reading
//

// Open the file with the specified encoding
FILE *fStream;
errno_t e = _tfopen_s(&fStream, _T("abc.txt"), _T("rt,ccs=UTF-8"));
if (e != 0) return; // failed..CString sRead;
CStdioFile f(fStream);  // open the file from this stream
CString sRead;
f.ReadString(sRead);
f.Close();

除了使用“UTF-8”编码,您还可以使用以下编码:

“ccs=UNICODE” => UTF-16(大端)
“ccs=UTF-8” => UTF-8
“ccs=UTF-16LE” => UTFS-16LE(小端)
“ccs=ANSI” => ANSI(操作系统的默认编码)

【讨论】:

  • 您的代码运行良好并在文件中写入特殊字符,但是当我尝试复制该数据并粘贴到另一个文件时,出现了一些问题。
  • @Himanshu 你到底是什么意思?文本对齐是显示文本的控件的责任,不会与文本一起复制。
  • 您的代码运行良好。假设我正在写这样的文件...
    a 10 xœuKkÃ0
    b 20 xœu
    c 30 œkÃ0
    当我打开该文件并再次保存它时,就像这样保存
    a 10 xœuKkÃ0b 20 xœuc 30 œkÃ0
    表示不占用下一行字符。
  • @Himanshu 我想问题出在你的换行符上。使用单个 \n 换行。
  • 先生,我使用了 '\n' 但它没有用,我使用了 '\r\n' 然后它采用了换行符。
【解决方案2】:

我又找到了一种方法。效果很好……

CString text=_T("HelloÄ^°H©º+");
CString strFilePath=_T("C:\\try.txt");
CFile theFile(strFilePath, CFile::modeReadWrite | CFile::modeCreate);
theFile.Write( (LPCTSTR) text, text.GetLength() * sizeof(TCHAR));
theFile.Close();

【讨论】:

    猜你喜欢
    • 2012-03-25
    • 2018-09-29
    • 1970-01-01
    • 2021-11-21
    • 2021-05-26
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多