使用wifstream和wofstream时,C ++语言环境的行为有所不同

时间:2019-06-16 10:43:11

标签: c++ utf-8 mingw locale utf-16

我试图将UTF-8字符串写入UTF-8编码的文件,然后读取所说的数据,但是我无法使其正常工作。

下面的代码是我的代码。我正在通过MinGW g ++ 6.3.0版运行它

#include <fstream>
#include <codecvt>

int main() {
  std::locale locale = std::locale(std::locale(), new std::codecvt_utf8_utf16<wchar_t>);

  std::wofstream ofs("./data1.txt");
  ofs.imbue(locale);
  ofs << L"abc123" << std::endl;
  ofs.close();

  std::wifstream ifs("./data1.txt");
  ifs.imbue(locale);
  std::wstring content;
  std::getline(ifs, content);
  ifs.close();

  ofs.open("./data2.txt");
  ofs.imbue(locale);
  ofs << content << std::endl;
  ofs.close();

  return 0;
}

如预期的那样,文件data1.txt的内容为abc123。但是,data2.txt的内容是愀戀挀㄀㈀㌀਀,这显然不是所期望的。我猜这是某种语言环境问题,但我无法弄清楚哪里出了问题。

0 个答案:

没有答案