std :: codecvt_utf8使用MSYS2 Bash和CMD进行错误输出

时间:2018-04-27 20:40:24

标签: c++ encoding facet codecvt

转载: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编译:{{1​​}}

Windows CMD g++ codecvt.cpp -o codecvt -O3

输出:codecvt.exe

MSYS2 Bash Test String O├û U├£ S┼Ş i─░ ─▒I

输出:$ ./codecvt.exe(相同)

适用于Windows 10 Bash的Ubuntu子系统

使用GCC 5.4.0进行编译:{{1​​}}

执行:Test String O├û U├£ S┼Ş i─░ ─▒I

输出:g++ codecvt.cpp -o codecvt -O3

我最近在c ++中一直在努力解决广泛的角色问题。我遇到了这个解决方案,但代码似乎只在linux环境中工作。 (我是一名c ++初学者(ish))

我还尝试了其他一些解决方案:

第一个解决方案

./codecvt

Windows CMD根据需要输出,没有问题。但输入是错误的。

MSYS2 Bash没有按照需要输出,但输入正确。

用于Windows 10 Bash的Ubuntu子系统对输入和输出都是正确的。

第二个解决方案

Test String OÖ UÜ SŞ iİ ıI

Windows CMD和MSYS2 Bash在程序启动时崩溃,MSYS2 Bash也报道:

setlocale(LC_ALL, "");

Ubuntu子系统Bash仍然很酷,适用于输入/输出。

我猜这是一个与Windows有关的问题?

0 个答案:

没有答案