char* in UTF8 ausgeben -> cout < str << endl;



  • Sorry, war eben nicht eingeloggt!
    Ich bin cHunter!

    ---------------------------------------------------------------------------

    Hallo!

    Eigentlich entwickel ich ja bevorzugt in Objective-C.

    Auch habe ich ein wenig Programmiererfahren in C++ nur mein aktuelles Problem lässt sich für mich so einfach nicht lösen.

    Ich möchte das Problem mal etwas skizzieren:

    char *variable = "Öö Üü Ää èÈ";
    
    cout << "variable: " << variable << endl;
    
    Konsolenausgabe:
    
    variable: Í÷ ▄³ ─õ Þ╚
    

    Ich denke, das cout nur ASCII "versteht". 😕

    Was muss ich tun um die variable über cout in UTF8 ausgeben lassen zu können?
    Ich habe schon zig Foren durchsucht und in der Lektüre nachgeschaut - bisher konnte ich noch keinen guten Lösungsansatz finden der auch tatsächlich funktionierte.

    Über jede Hilfe würde ich mich sehr freuen! :xmas1:

    ➡

    Ich möchte den Wert der Variable nicht nur in UTF8 auf der Konsole ausgeben sondern möchte mit dem Wert im UTF8-Zeichensatz weiterarbeiten.
    Also Beispielsweise in einer Datenbank ablegen können - in UTF8 - oder in eine Textdatei schreiben.

    ➡

    Schönen Gruss, cHunter *gg



  • Das ist absolut Compilerabhängig. Zum beispiel, ob er die Umlaute im Quelltext akzeptiert. Und selbst dann ist noch nicht garantiert, dass er sie in string-Literalen auch akzeptiert. In C++11 gibts utf8-Stringliterale. Damits dort auch portabel ist, müsstest du die Umlaute dann allerdings trotzdem noch mit \uXXXX unicode-Codierungen angeben.



  • Vielen Dank für deine Unterstützung!

    Ich habe nun einen Ansatz gefunden - zumindest sieht es sehr danach aus:

    wchar_t wData[200];
    MultiByteToWideChar(CP_UTF8, 0, "hallöle", -1, wData, 200);
    
    wcout << "# " << wData << endl;
    
    Konsolenausgabe:
    
    # hall
    

    Er bricht vor dem ö ab.

    Quelle: http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx

    Wieso könnte das so nicht funktionieren? 😕



  • Nochmal:

    pumuckl schrieb:

    Zum beispiel, ob er [der Compiler] die Umlaute im Quelltext akzeptiert. Und selbst dann ist noch nicht garantiert, dass er sie in string-Literalen auch akzeptiert.



  • pumuckl schrieb:

    Das ist absolut Compilerabhängig. Zum beispiel, ob er die Umlaute im Quelltext akzeptiert. Und selbst dann ist noch nicht garantiert, dass er sie in string-Literalen auch akzeptiert. In C++11 gibts utf8-Stringliterale. Damits dort auch portabel ist, müsstest du die Umlaute dann allerdings trotzdem noch mit \uXXXX unicode-Codierungen angeben.

    Danke für deine wertvolle Anregung.

    Ich habe soeben bemerkt, dass das Zielsystem kein UTF-8 erwartet sondern ANSI.

    Nun funktioniert das auch mit meinen Sonderzeichen.

    Nachfolgend meine Lösung für die Nachwelt:

    void Class::strcpy_cw(wchar_t* Dest, char* Src)
    {
        // e.g. 255 
        MultiByteToWideChar(CP_ACP, 0, Src, -1, Dest, 255);
    }
    

    Schönen Gruss, cHunter^^


Anmelden zum Antworten