Glib::ConvertError beim Schreiben eines Glib::ustring auf einen stream
-
Hallo!
Ich komme gerade trotz intensivem Suchen mit einem Problem mit Glib::ustring nicht weiter. Immer wenn in meinem ustring ein Nicht-ASCII-Zeichen enthalten ist und ich den ustring auf einen stream schreiben will bekomme ich einen Glib::ConvertError geworfen:
int main() { std::cout.imbue(std::locale("")); std::cout << Glib::ustring("ä") << std::endl; return 0; }
Wenn ich das übersetze Programm ausführe bekomme ich wie gesagt den Glib::ConvertError geworfen. Mein aktuelles Locale ist de_DE.UTF-8, das ein "ä" natürlich darstellen können sollte.
Folgender Code z.B. macht eine korrekte Ausgabe:
int main() { std::cout.imbue(std::locale("")); std::cout << Glib::ustring("ä").raw() << std::endl; return 0; }
Hat jemand eine Idee was ich falsch mache?
Danke euch schonmal!
Matthias
-
Jo, du musst den ustring konvertieren: http://gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__CharsetConv.html#gcc062729285890a7e9b22bece6fb987c
-
GPC schrieb:
Jo, du musst den ustring konvertieren: http://gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__CharsetConv.html#gcc062729285890a7e9b22bece6fb987c
Hmm sollte nicht die Ausgabe auf den Stream selbst schon ins Locale konvertieren? So jedenfalls lese ich die Doku. (http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/classGlib_1_1ustring.html im Abschnitt "Glib::ustring and stream input/output")
Und selbst wenn operator<< keine Konvertierung von sich aus machen würde, dann dürfte doch kein ConvertError geschmissen werden sondern im schlimmsten Fall einfach Zeichenmüll auf der Konsole erscheinen.
Ich deute den ConvertError eher so, dass aus irgendeinem Grund eine Konvertierung auf US-ASCII versucht wird und dabei das "ä" eben nicht konvertiert werden kann, da dies in US-ASCII nicht vorkommt.
-
mawis schrieb:
GPC schrieb:
Jo, du musst den ustring konvertieren: http://gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__CharsetConv.html#gcc062729285890a7e9b22bece6fb987c
Hmm sollte nicht die Ausgabe auf den Stream selbst schon ins Locale konvertieren? So jedenfalls lese ich die Doku. (http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/classGlib_1_1ustring.html im Abschnitt "Glib::ustring and stream input/output")
Stimmt. Sorry, hab ich vergessen.
Und selbst wenn operator<< keine Konvertierung von sich aus machen würde, dann dürfte doch kein ConvertError geschmissen werden sondern im schlimmsten Fall einfach Zeichenmüll auf der Konsole erscheinen.
Ich deute den ConvertError eher so, dass aus irgendeinem Grund eine Konvertierung auf US-ASCII versucht wird und dabei das "ä" eben nicht konvertiert werden kann, da dies in US-ASCII nicht vorkommt.
Ich nehme an, das setzen der locale wird als US-ASCII locale interpretiert? Was hast du für ein System?