在 C++ 项目中,我想打开一个文件 ( fstream::open()
)(这似乎是一个主要问题)。我的程序的 Windows 版本惨遭失败。
文件“ä”(UTF-8 0xC3 0xA4)
std::string s = ...; //Convert s std::fstream f; f.open(s.c_str(), std::ios::binary | std::ios::in); //Works (f.is_open() == true) f.close(); f.open(s.c_str(), std::ios::binary | std::ios::in | std::ios::out); //Doesn't work
该字符串
s
是 UTF-8 编码的,但随后从 UTF-8 转换为 Latin1 (0xE4)。我正在使用 Qt,所以QString::fromUtf8(s.c_str()).toLocal8Bit().constData()
.为什么我可以打开文件进行阅读,但不能打开文件?
文件 "и" (UTF-8 0xD0 0xB8)
相同的代码,根本不起作用。
看来,这个字符不适合 Windows-1252 字符集。如何打开这样的 fstream(我没有使用 MSVC,所以没有fstream::open(const wchar_t*, ios_base::openmode)
)?