std :: ifstream :: imbue不起作用

时间:2016-11-22 17:11:51

标签: c++ utf-8 iostream utf-16 wchar-t

我正在尝试用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.

0 个答案:

没有答案