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