UTF8 zu ISO 8859-1



  • Hi

    Ich habe folgendes Problem:

    string text = argv[1]; // Eingabe = "für"
    
    for (int i = 0; i < text.size(); i++)
    {
      printf ("%X\n", text[i]);
    }
    

    erhalte ich als Ausgabe:

    66 -> f
    C3 -> UTF8 codiertes ü
    BC -> UTF8 codiertes ü
    72 -> r
    

    Soweit so gut. Diesen string will ich jetzt allerdings an eine Funktion übergeben die mir daraus ein Bitmap generiert (freetype2 -> FT_Load_Char (face, (unsigned char) text[n], FT_LOAD_RENDER); )

    Leider muss ich hier jedes Zeichen einzeln übergeben und zwar ISO 8859-1 codiert.

    Ich suche also eine einfache Möglichkeit wie ich einen string der UTF8 Zeichen enthält in einen ISO 8859-1 string oder unsigned char* verwandeln kann.

    Dazu muss es doch eine einfache Funktion geben? Ich find sie nur leider nicht 😕 (google spukt zu meinen Suchkriterien nichts brauchbares aus)

    MfG Keros



  • Keros schrieb:

    Dazu muss es doch eine einfache Funktion geben?

    Muss es nicht unbedingt.

    Bei so kleinen aber speziellen Problemen geht es meistens schneller die Lösung selbst zu programmieren, als das Internet eine halbe Ewigkeit nach ein paar Zeilen passenden fertigen Code zu durchforsten. 😉

    Ich würde dir also empfehlen einfach mal nachzuschaun wie diese Kodierung überhaupt funktioniert, und dann zu versuchen sie selbst zu implementieren.



  • Hmm

    Ein Workaround hab ich mir schon geschrieben das ging relativ schnell.

    Ich hab mich nur gewundert das es keine Standartfunktion dafür gibt. Dachte sowas braucht man öfter mal 😃



  • Im TR1 sind afaik neue codecvts enthalten, u.a. utf8, 16, 32 iirc.
    Man möge mich korrigieren wenns nicht stimmt.
    rya.



  • Für welche Plattform programmierst du? Unter Unix würde man für sowas beispielsweise libiconv benutzen, und GLib (u.a.) bringt auch ein paar passende Funktionen mit.

    Die Konvertierung selbst zu programmieren halte ich für eine ausgesprochen schlechte Idee.



  • scorcher24 | off schrieb:

    Im TR1 sind afaik neue codecvts enthalten, u.a. utf8, 16, 32 iirc.
    Man möge mich korrigieren wenns nicht stimmt.
    rya.

    Nein, dazu ist leider nichts drin.



  • dooooomi schrieb:

    Für welche Plattform programmierst du? Unter Unix würde man für sowas beispielsweise libiconv benutzen, und GLib (u.a.) bringt auch ein paar passende Funktionen mit.

    Die Konvertierung selbst zu programmieren halte ich für eine ausgesprochen schlechte Idee.

    Guter Punkt, unter Windows wäre das pendant die Unicows-DLL von M$ oder auch die libiconv, nur das Problem ist da die Lizenz. (GPL).

    @bulli
    Danke, aber ich mein da war in einer früheren Version des Reports was dabei. Kann mich auch irren :).



  • scorcher24 | bulli schrieb:

    Guter Punkt, unter Windows wäre das pendant die Unicows-DLL von M$ oder auch die libiconv, nur das Problem ist da die Lizenz. (GPL).

    libiconv ist LGPL, das sollte also kein Problem sein. Aber wenn Windows die entsprechende Funktionalität schon mitbringt wär's sicher nicht verkehrt, diese auch zu nutzen.


Log in to reply