转载: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有关的问题?