对我来说,这似乎很艰难。我有这段代码将CString打印到文本文件,但是该值恰好是Unicode(日语)。一旦点击此行,它下面的其他任何内容都不会被打印。

知道如何在文本文件中打印日语文本吗?

#define OFSTREAM std::wofstream

OFSTREAM *outfile;
outfile = new OFSTREAM;
outfile->open (filename, ios::out);

CString varName = _T(" ");
/*stuff*/
*outfile << _T("  Name: ") << (LPCTSTR)varName << _T("\n");

最佳答案

流停止工作的原因是因为设置了失败位。您没有处理错误,因此流停止工作。错误发生时需要清除故障位。

必须设置wostream对象上的语言环境,以便编解码器构面能够处理将日语宽字符转换为字节的过程。默认情况下,使用“C”语言环境,在VS中仅支持ASCII字符。如果只需要编写文件即可在日语版的Windows上运行,则可以执行以下操作:

std::wofstream outfile(filename, ios::out);
outfile.imbue(std::locale("")); // use the system locale

CString varName = _T(" ");
/*stuff*/
outfile << L"  Name: " << (LPCTSTR)varName << L"\n";

或者,您可以在Windows上指定日语语言环境:
outfile.imbue(std::locale("Japanese")); // use the japanese locale on any Windows system

这两种方法都使用传统的日语语言环境编码,应该避免使用。您可以改用UTF-8:
// replace just the codecvt facet of the stream's current locale
outfile.imbue(std::locale(outfile.getloc(), new std::codecvt_utf8_utf16<wchar_t>()));

关于c++ - 如何将Unicode CString(日语)打印到文本文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12207462/

10-13 03:28