流停止工作的原因是设置了失败位。您没有处理错误,因此流停止工作。发生错误时需要清除失败位。
必须设置 wostream 对象的语言环境,以便 codecvt 方面处理将日语宽字符转换为字节。默认情况下,使用“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>()));