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

时间:2014-03-10 12:16:48

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

我想写一些像ô这样的特殊字符。 ö,`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);

2 个答案:

答案 0 :(得分: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(Big endian)
   “ccs = UTF-8”=> UTF-8
   “ccs = UTF-16LE”=> UTFS-16LE(Little endian)
   “ccs = ANSI”=> ANSI(操作系统的默认编码)

答案 1 :(得分:1)

我找到了另外一种方法。它运作良好......

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();