Deutsche Umlaute



  • Es gibt eine einfachere Methode im C++ Konsolenprogrammierung Umlaute zu verwenden und auch Sonderzeichen:

    #include <locale>
    using namespace std;
    
    main()
    {
      locale loc("");
      locale::global(loc);
    
      cout << " Ä ä Ö ö Ü ü ß" << endl;
    }
    

    Somit muss der Programmierer nicht immer umständlich die Codierung im Text einfügen.

    lg
    Sandor++



  • Das bringt leider nix, wenn z.B. die Windows-Konsole keine Sonderzeichen unterstützt und dann sowas rauskommt:

    ─ õ Í ÷ ▄ ³ ▀
    


  • RonjaRaeuber schrieb:

    Das bringt leider nix, wenn z.B. die Windows-Konsole keine Sonderzeichen unterstützt und dann sowas rauskommt

    Es liegt nicht an der Windows Konsole!
    Ich hab mich neulich erst näher damit beschäftigt.
    Am Ende von ostream::operator<< wird wohl unter Windows irgendwo ganz tief unten WriteConsoleA oder eine ähnliche Funktion stehen.
    Diese Funktionen erwarten als Encoding

    ANSI characters from the console's current code page

    . Wenn du nun Umlaute in deinem Sourcecode stehen hast, werden sie in dem Encoding gespeichert, was dein Editor verwendet. Stimmen diese beiden Encodings überein: super, kein Problem, du siehst die Umlaute. Stimmen die nicht überein, kommt Müll raus.
    Um nun beliebige Zeichen auszugeben, muss man sie in das Ziel-Encoding konvertieren. Bei mir ist das die Windows Codepage 850. Die unterstützt aber längst nicht alle Zeichen von bspw. Unicode!
    Also sollte man WriteConsoleW verwenden. WriteConsoleW erwartet nämlich soweit ich weiß den Ausgabestring als UTF-16. Und UTF-16 unterstützt alle diese Zeichen. Das einzige Problem was bleibt ist folgendes: Es kann sein, dass die Schriftart der Windows Konsole nicht Glyphs für alle Unicodezeichen hat, aber es werden auf jeden Fall schon mehr unterstützt. Ich kann auf jeden Fall problemlos viele Sonderzeichen so ausgeben.



  • Ist das nun trotzdem noch besser, als sowas zu verwenden?

    const unsigned char AE = static_cast<unsigned char>(142);
    const unsigned char ae = static_cast<unsigned char>(132);
    const unsigned char OE = static_cast<unsigned char>(153);
    const unsigned char oe = static_cast<unsigned char>(148);
    const unsigned char UE = static_cast<unsigned char>(154);
    const unsigned char ue = static_cast<unsigned char>(129);
    const unsigned char ss = static_cast<unsigned char>(225);
    


  • Das Beste ist, in Konsolenprogrammen auf Umlaute zu verzichten.



  • DirkB schrieb:

    Das Beste ist, in Konsolenprogrammen auf Windows zu verzichten.



  • Ich habe leider nur noch vergessen das #include <iostream>
    zu deklarien. Also bei mir funktionierts wunderbar.
    Mit Linux sowie auch unter Windows. Da nutze ich aber das VS C++ 2013 IDE.



  • ftfy schrieb:

    DirkB schrieb:

    Das Beste ist, auf Windows zu verzichten.



  • Was die Leute hier für Probleme haben...



  • Sandor++ schrieb:

    Ich habe leider nur noch vergessen das #include <iostream>
    zu deklarien. Also bei mir funktionierts wunderbar.
    Mit Linux sowie auch unter Windows. Da nutze ich aber das VS C++ 2013 IDE.

    Wie Nathan schon sagte: Das geht nur wenn das Encoding von IDE und Konsole gleich ist. Stell das mal um und du wirst sehen: Es geht nicht mehr.



  • Und wo stellt man die um?


Anmelden zum Antworten