Unicode ģ mit Escape-Backslash \ in CString ausgeben



  • Wie gesagt, wenn ich bei google den Code für klein G mit Cedille suche, findet er den Code x123. Wenn ich nun "\x123" als C-String ausgeben möchte, gibt das Programm eine Raute aus!

    Wo ist der Fehler?



  • Was nutzt du zur Ausgabe? Die Konsole ist nämlich ziemlich limitiert, was spezielle Zeichen und Unicode angeht.



  • Nexus schrieb:

    Was nutzt du zur Ausgabe? Die Konsole ist nämlich ziemlich limitiert, was spezielle Zeichen und Unicode angeht.

    Ich kopiere den String auf die Zwischenablage und egal wohin ich es "paste" kommt eine Raute #.



  • Unicode ist nicht gleich Unicode. Also um genau zu sein: Um Unicode darzustellen gibt es zahlreiche Varianten. zB UTF-8 (üblich unter Linux, OSX etc.) und UTF-16 (üblich unter Windows). Du musst erst einmal schauen, welche Variante dein System bzw. das Terminal unterstützt. Dann musst du das Zeichen entsprechend darstellen. \x123 wird kein char sein, da 0x123 größer als 8Bit ist.

    Unter Linux sollte

    cout << "ģ\n"; //edit das Forum wandelt leider das Zeichen um. Aber einfach das UTF-8 Zeichen einfügen.
    

    üblicherweise funktionieren (also ģ als UTF-8). Unter Windows mit cmd.exe wird das ganze wohl ein bisschen komplizierter.

    Siehe auch http://magazin.c-plusplus.net/artikel/Einf�hrung in Codepages und Unicode

    edit: Huch das Forum wandelt das Zeichen um 😕 Also unter Linux sollte

    cout << "\xc4\xa3\n";
    

    gehen bzw. das Zeichen direkt als UTF-8.



  • void putClip(wchar_t source[])
    {
        OpenClipboard(0);
       EmptyClipboard();
       HGLOBAL clipbuffer = GlobalAlloc(GMEM_DDESHARE, wcslen(source)+1);
       wchar_t * buffer = (wchar_t*)GlobalLock(clipbuffer);
       wcscpy(buffer, source);
       SetClipboardData(CF_TEXT,clipbuffer);
       CloseClipboard();
    }
    

    Ich rufe die Funktion so auf:

    putClip(L"\u0123");

    Und es löst einen Haltepunkt bei SetClipboardData() aus. Woran kann das liegen?


Anmelden zum Antworten