Los caracteres fstream :: open () Unicode o no Ascii no funcionan (con std :: ios :: out) en Windows

En un proyecto de C ++, quiero abrir un archivo (fstream::open()) (lo que parece ser un problema importante). La compilación de Windows de mi programa falla miserablemente.

Archivo "ä" (UTF-8 0xC3 0xA4)

<code>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
</code>

La cuerdas está codificado en UTF-8, pero luego se convierte de UTF-8 a Latin1 (0xE4). Estoy usando Qt, entoncesQString::fromUtf8(s.c_str()).toLocal8Bit().constData().

¿Por qué puedo abrir el archivo para leer, pero no para escribir?

Archivo "и" (UTF-8 0xD0 0xB8)

Mismo código, no funciona en absoluto.

Parece que este personaje no cabe en el conjunto de caracteres Windows-1252. ¿Cómo puedo abrir una fuente de este tipo (no estoy usando MSVC, por lo quenofstream::open(const wchar_t*, ios_base::openmode))?

Respuestas a la pregunta(2)

Su respuesta a la pregunta