我正在尝试用utf-8读取用utf-16编写的文本文件。
#include <fstream>
#include <codecvt>
#include <cassert>
int main(int argc, char** argv)
{
std::ios_base::sync_with_stdio(false);
const wchar_t utf16_raw_string[] = L"Привет!";
const char expected_string [] = u8"Привет!";
std::ofstream("file.txt").write((char*)utf16_raw_string, sizeof(utf16_raw_string));
std::ifstream ifs("file.txt");
ifs.imbue(std::locale(std::locale::empty(), new std::codecvt<wchar_t, char, std::mbstate_t>() ));
std::string got_string;
ifs >> got_string;
assert(got_string == expected_string);
return 0;
}
似乎imbue
不起作用。无论codecvt
是什么,got_string
总是"\x1f\x4@\x48\x42\x45\x4B\x4"
,我得到断言。有什么想法吗?
我正在使用Visual Studio 2015及更新3.