如何使用 mfc 应用程序在文件中写入特殊字符?

Posted

技术标签:

【中文标题】如何使用 mfc 应用程序在文件中写入特殊字符?【英文标题】:How to write Special characters in a file using mfc application? 【发布时间】: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(); 【参考方案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();

【讨论】:

以上是关于如何使用 mfc 应用程序在文件中写入特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何将特殊字符原样写入 XML 文件

将文本写入文件后的mfc c++奇怪的块字符

如何防止写入特殊字符[重复]

如何在MFC中读取txt文件中的数据

使用 C# 使用特殊字符写入 XML 文档

MFC 将含中文的CString写入文本