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)
)。