Ausgabe von Unicode-Zeichenfolgen in der Windows-Konsolen-App
Hallo, ich habe versucht, eine Unicode-Zeichenfolge auf einer Konsole mit auszugebeniostreams und scheiterte.
Ich habe das gefunden:Verwenden der Unicode-Schriftart in der C ++ - Konsolenanwendung und dieses schnipsel funktioniert.
SetConsoleOutputCP(CP_UTF8);
wchar_t s[] = L"èéøÞǽлљΣæča";
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
char* m = new char[bufferSize];
WideCharToMultiByte(CP_UTF8, 0, s, -1, m, bufferSize, NULL, NULL);
wprintf(L"%S", m);
Ich habe jedoch keine Möglichkeit gefunden, Unicode mit iostreams korrekt auszugeben. Irgendwelche Vorschläge?
Das funktioniert nicht:
SetConsoleOutputCP(CP_UTF8);
utf8_locale = locale(old_locale,new boost::program_options::detail::utf8_codecvt_facet());
wcout.imbue(utf8_locale);
wcout << L"¡Hola!" << endl;
BEARBEITEN Ich konnte keine andere Lösung finden, als dieses Snippet in einen Stream zu packen. Hoffe, jemand hat bessere Ideen.
//Unicode output for a Windows console
ostream &operator-(ostream &stream, const wchar_t *s)
{
int bufSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
char *buf = new char[bufSize];
WideCharToMultiByte(CP_UTF8, 0, s, -1, buf, bufSize, NULL, NULL);
wprintf(L"%S", buf);
delete[] buf;
return stream;
}
ostream &operator-(ostream &stream, const wstring &s)
{
stream - s.c_str();
return stream;
}