Umlaute ausgeben (fehlgeschlagen)
-
Ich wollte in meinen Zeichenketten Umlaute einsetzten und sie dann ausgeben, benutz hab ich es mit einer Headerdatei wobei ein Fehler aufgetreten ist jedoch weiß ich nicht warum:
http://www.fotos-hochladen.net/uploads/screenshot28jof4pn1q5r.png
Mein Code:
#include <iostream> #include <locale> int main() { std::locale::global(std::locale("German")); std::cout << "ÄÖÜäöüß" << std::endl; std::cout << "Ümläute Test!" << std::endl; system("PAUSE"); return 0; }
-
"German" scheint kein gültiger Locale-Name zu sein. Probiers mal mit "de-de".
Nächstes Mal könntest du die Fehlermeldung auch hier her kopieren, dazu klickst du mit der rechten Maustaste auf die Titelleiste der Konsole und wählst Markieren aus. Nachdem du die Meldung markiert hast, drückst du Enter und der Text ist in der Zwischenablage.
-
mit mingw-w64 bekomme ich auch keine zum laufen
en_US.UTF8
en_US
en-US
de_DEnur "C" funktioniert, aber das ist ja herlich sinnlos.
Linux müsste xx_XX aber schlucken.
-
patrick246 schrieb:
dazu klickst du mit der rechten Maustaste auf die Titelleiste der Konsole und wählst Markieren aus.
Wenn man Quick-Edit aktiviert hat ist es noch einfacher: mit Click+Drag markieren und dann mit Rechtsklick kopieren. Und Rechtsklick ohne Markierung ist Paste.
-
Was funktionieren sollte ist
std::locale::global(std::locale("")); // Beachte: ""Das schaltet von "C" auf das System um.
-
Das hat nichts mit std::locale zu tun. Das Problem ist, dass Windows unter Windows ein anderes Encoding verwendet, als in der Kommandozeile.
Windows selbst verwendet CP-1252 und in der Kommandozeile Codepage 437 oder 850. Wenn Du in einem grafischen Editor im Sourcecode das Zeichen 'ä' eingibst, ergibt das das Zeichen '\xe4'. In der Konsole wird das unter der Codepage 850 als 'õ' dargestellt. Um ein 'ä' auszugeben, musst Du den Bytecode für das 'ä' in der Codepage 850 ausgeben. Und das ist '\x84'. Versuche mal das:
#include <iostream> int main(int argc, char* argv[]) { std::cout << '\x84' << std::endl; }Du solltest in der Kommandozeile das Zeichen 'ä' sehen. Ich kann es hier nicht testen, da ich kein Windows habe, aber vielleicht kann das jemand bestätigen, der ein Windows zur Verfügung hat.
Das locale bewirkt, dass Dezimal- und Tausendertrennzeichen korrekt ausgegeben werden. Mach mal:
std::cout.imbue(std::locale("de_DE")); std::cout << 1453.4 << std::endl;Bei mir ergibt das die Ausgabe:
1.453,4Wieder mit dem Hinweis, dass ich kein Windows habe
.