[utf-8] von iso-8859-15 --> utf-8 in C



  • Hi

    Ich arbeite gerade an einem GTK+ Programm und merke, dass ich einige Probleme mit den ä,ö und ü Zeichen habe. Ich lese Daten aus einer SQLite Datenbank-Datei aus und lasse sie in Combo-Boxen anzeigen. Doch die Daten mit ä,ö oder ü werden nicht vollständig angezeigt und bekomme folgendes auf der Console:

    (aof-gui:2552): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
    

    Die Daten kamen in die Datenbank über die Kommandozeile, also denke ich, dass sie nicht in die DB in utf-8 liegen.

    Wenn ich sowas mache:

    GString* utf8;
    utf8 = g_string_new("täst");
    g_print("utf8->str = %s\n", utf8->str);
    

    dann bekomme ich eben sowas wie Pango-WARNUNG ....
    es muss doch eine Möglichkeit geben, dass ich dieses "täst" in utf-8 umwandeln kann, so dass g_string_new keine Fehler auspuckt. Ich hab http://www.gtk.org/api/2.6/glib/glib-Unicode-Manipulation.html gesucht, aber irgendwie keine passende Funktion dazu gefunden. Kann mir bitte jemand dabei helfen?

    Danke



  • 🕶 upps, hab schon gefunden, g_convert



  • Speicher die Code Datei doch als UTF-8.



  • kingruedi schrieb:

    Speicher die Code Datei doch als UTF-8.

    das hat nicht viel gebracht, außerdem war das nur ein Beispiel. Die Daten kommen von der Datenbank, da kann ich nichts mehr machen, außer die Datenbank in UTF-8 zu ändern.

    Aber mit g_convert habe ich bereits gefunden, was ich gesucht habe. Jedenfalls danke.



  • kann mir vielleicht jemand erklären,
    wie ich einen const gchar* String dann korrekt umwandeln kann?

    Ich lese aus einem GTK_ENTRY den string aus und möchte ihn auf Buchstaben prüfen.
    Umlaute soll er aber eben annehmen!

    Den String speicher ich als const gchar* String.
    Überprüfen tu ich mit einer for-schleife jedes zeichen
    bei äöüß sagt er: nix da!

    Kann mir jemand helfen?
    denn ich möchte diese eingaben auch so in der SQLite Datenbank speichern, mit äöüß, denn da sgeht ja!



  • Guest1990 schrieb:

    kann mir vielleicht jemand erklären,
    wie ich einen const gchar* String dann korrekt umwandeln kann?

    Ich lese aus einem GTK_ENTRY den string aus und möchte ihn auf Buchstaben prüfen.
    Umlaute soll er aber eben annehmen!

    Den String speicher ich als const gchar* String.
    Überprüfen tu ich mit einer for-schleife jedes zeichen
    bei äöüß sagt er: nix da!

    Kann mir jemand helfen?
    denn ich möchte diese eingaben auch so in der SQLite Datenbank speichern, mit äöüß, denn da sgeht ja!

    Ich hab mir damals folgenden Funktionen geschrieben:

    /*
     * GString* g_string_iso_to_utf8(const gchar* string)
     *
     * Converts a string in ISO-8859-1 into a one in UTF-8. It takes
     * only '\0' terminated string.
     *
     * Returns: a GString in UTF-8 format
     */
    GString* g_string_iso_to_utf8(const gchar* string)
    {
            GString *str;
            GError *error = NULL;
            gchar* str_utf8 = NULL;
            if(!string) return NULL;
    
            str_utf8 = g_convert(string, -1, "UTF-8", "ISO-8859-1", NULL, NULL, &error);
    
            if (error != NULL)
            {
                    g_error_free (error);
                    g_free(str_utf8);
                    return NULL;
            }
    
            str = g_string_new(str_utf8);
    
            g_free(str_utf8);
    
            return str;
    }
    
    /*
     * GString* g_string_utf8_to_iso(const gchar* string)
     *
     * Converts a string in UTF-( into one in ISO-8859-1. It takes
     * only '\0' terminated string.
     *
     * Returns: a GString in ISO-8859-1 format
     */
    GString* g_string_utf8_to_iso(const gchar* string)
    {
            GString *str;
            GError *error = NULL;
            gchar* str_iso = NULL;
            if(!string) return NULL;
    
            str_iso = g_convert(string, -1, "ISO-8859-1", "UTF-8", NULL, NULL, &error);
    
            if (error != NULL)
            {
                    g_error_free (error);
                    g_free(str_iso);
                    return NULL;
            }
    
            str = g_string_new(str_iso);
    
            g_free(str_iso);
    
            return str;
    }
    

Anmelden zum Antworten