在 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,所以no fstream::open(const wchar_t*, ios_base::openmode))?
在 Microsoft 的 STL 实现中,有一个非标准扩展(重载)以允许对 UTF-16 编码字符串提供 unicode 支持。
只需将 UTF-16 编码的 std::wstring 传递给 fstream::open() 即可。这是使其与 fstream 一起工作的唯一方法。
您可以在此处详细了解我认为在 Windows 上支持 unicode 的最简单方法:http://utf8everywhere.org/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)