对我来说,这似乎很艰难。我有这段代码将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/