[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; }