std :: codecvt_utf8 фасетный ошибочный вывод с MSYS2 Bash и CMD

Воспроизвести: codecvt.cpp

#include <iostream>
#include <locale>
#include <string>
#include <codecvt>

using namespace std;

int main()
{
ios_base::sync_with_stdio(false);

locale utf8(locale(), new codecvt_utf8<wchar_t>);
wcout.imbue(utf8);

wstring str(L"Test String OÖ UÜ SŞ iİ ıI");
wcout << str << '\n';
}

Компилировать с GCC 6.3.0: g++ codecvt.cpp -o codecvt -O3

Windows CMD: codecvt.exe

Выход: Test String O├û U├£ S┼Ş i─░ ─▒I

MSYS2 Bash: $ ./codecvt.exe

Выход: Test String O├û U├£ S┼Ş i─░ ─▒I (так же)

Подсистема Ubuntu для Windows 10 Bash:

Компилировать с GCC 5.4.0: g++ codecvt.cpp -o codecvt -O3

Выполнение: ./codecvt

Выход: Test String OÖ UÜ SŞ iİ ıI

В последнее время я боролся с проблемами с широким характером в c ++. Я столкнулся с этим решением, но кажется, что код работает только в среде Linux. (Я начинающий с ++ (ish))

Я также попробовал некоторые другие решения:

Первое решение:

setlocale(LC_ALL, "");

Windows CMD выводит по желанию, без проблем. Но ввод ошибочен.

MSYS2 Bash не выводит должным образом, но ввод правильный.

Подсистема Ubuntu для Windows 10 Bash корректна как с вводом, так и с выводом.

Второе решение:

locale::global(locale("C.UTF-8"));

Windows CMD и MSYS2 Bash аварийно завершают работу при запуске программы, MSYS2 Bash также сообщает:

what(): locale::facet::_S_create_c_locale name not valid

Подсистема Ubuntu Bash по-прежнему классная, работает на ввод / вывод корректно.

Я предполагаю, что это проблема, связанная с Windows?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …