Ответ 1
В настоящее время нет простого решения.
Вам нужно создать свой собственный буфер потока, который использует _wfopen
под капотом. Вы можете использовать для этого, например, boost::iostream
Мне нужно открыть файл как std:: fstream (или фактически любой другой std:: ostream), когда имя файла - это имя файла Unicode.
В MSVC у меня есть нестандартное расширение std::fstream::open(wchar_t const *,...)
? Что я могу сделать с другими компиляторами, такими как GCC (наиболее важный) и, возможно, компилятор Borland.
Я знаю, что CRTL предоставляет _wfopen
, но вместо io-потоков он дает интерфейс C FILE *
, возможно, существует нестандартный способ создания io-потока из FILE *
? Есть ли boost::ifstream
с расширением MSVC для Windows?
В настоящее время нет простого решения.
Вам нужно создать свой собственный буфер потока, который использует _wfopen
под капотом. Вы можете использовать для этого, например, boost::iostream
К сожалению, нет стандартного способа сделать это, хотя С++ 0x (1x?) promises для этого. До тех пор вы правильно предполагали, что решение можно найти в Boost, однако библиотека, которую вы ищете, Boost.Filesystem.
Boost.Filesystem по умолчанию использует широкие строки по своей универсальной системе путей, поэтому в этом отношении нет проблем с Юникодом.
Преобразуйте имя файла Unicode в строку char*
, используя что-то вроде wcstombs()
или WideCharToMultiByte()
(что дает вам больший контроль над вовлеченными кодовыми страницами).
Затем используйте преобразованное имя файла, чтобы открыть файл.