std::string path("path.txt");
std::fstream f(path);
f.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
std::string lcpath;
f >> lcpath;
Reading a utf-8 text from path.txt
on windows fails with MSVC compiler on windows in the sense lcpath
does not understand the path as utf-8.
The below code works correctly on linux when compiled with g++.
std::string path("path.txt");
std::fstream ff;
ff.open(path.c_str());
std::string lcpath;
ff>>lcpath;
Is fstream
on windows(MSVC) by default assume ascii only?
In the first snippet if I change string
with wstring
and fstream
with wfstream
, lcpath
gets correct value on windows as well.
EDIT: If I convert the read lcpath
using MultiByteToWideChar()
, I get the correct representation. But why can't I directly read a UTF-8 string into std::string
on windows?