Hallo,
ich kann keine Umlaute unter Qt 3.3.3 unter Suse 9.2 ausgeben. (Qt wurde mit Yast installiert)
Code-Auszug:
#include <qpainter.h>
#include <stdlib.h> //für sprintf
#include <qstring.h> //für QString
.....
QPainter p (this);
QString s2;
s2.sprintf("Höööööhe (neuer Test) in mm: %d",789 );
p.drawText(20,560,s2);
....
Jedes "ö" wird mit zwei Zeichen dargestellt bei der Ausgabe und eben nicht als "ö". Andere Textausgaben funktionieren ohne Probleme auf diese Art und Weise, eben nur keine Umlaute! Woran kann das liegen? Wie kann man dieses Problem lösen?
Habe auch das Buch:"Das QT Buch", 2.Auflage von Helmut Herold. Dort auf Seite 263 ist das Programm:"printerinfo.cpp", welches mit einer s.sprintf -Anweisung unter anderem das Wort:" Seitenverhältnis" ausgeben soll. Dieses Programm gibt bei mir auch den Umlaut "ä" nicht aus, sondern dafür wieder 2 andere Zeichen. Kann es sein, dass man bei meinem Suse-System irgend etwas, irgend wo einstellen oder ändern muss? Und wenn ja, was und wo und wie?
Ich hoffe sehr, dass einige Leute hier sind, die unter Suse Linux Qt programmieren und vielleicht das Problem schon gelöst haben, denn ich habe nichts unter Google gefunden und weiß keine Lösung dafür. Würde mich sehr freuen, wenn jemand eine Lösung hat und sie posten kann.
Danke schon mal im voraus.
[gelöst] Problem mit Umlauten unter Suse 9.2
-
barton2500
- Beiträge: 4
- Registriert: 27. Februar 2005 22:51
[gelöst] Problem mit Umlauten unter Suse 9.2
Betriebssystem: Suse 9.2, Motherboard: Asus A7N8X-E Deluxe,wireless edition.
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Soweit ich weiss, wir SuSE 9.x standardmäßig mit UTF8 Support installiert. Und Umlaute sind nur mit latin1 richtige Umlaute, er versucht die in UTF8 umzuwandeln, da diese ja eben latin1 sind. Probier einmal sowas wie ä für ä und ö für ö usw. Oder nimm einen QString( "äöü" ).latin1(); das ist eigentlich kein Qt Problem, sondern mehr ein locale Problem. In Qt wird das alles automagisch gelöst und umgewandelt.
-
barton2500
- Beiträge: 4
- Registriert: 27. Februar 2005 22:51
Habe die Lösung für dieses Problem gefunden.
Die Lösung schaut so aus:
Code-Auszug:
QString s7;
s7.sprintf("Schöne Umlaute: ÖÄÜ, öäü");
p.drawText(20,580, QString::fromUtf8(s7) );
Ich wusste nicht, dass es entscheidend sein kann, in welcher Art und Weise der verwendete Editor kodiert. Aber in diesem Fall, ist dies entscheidend, denn in dessen Abhängigkeit muss man dann den Zeichensatz codieren unter Qt.
Ich habe als Editor unter anderem KDevelop benutzt, ohne dort irgend welche großartigen Einstellungen zu verändern. Dort findet man unter Einstellungen->Editor-Einstellungen->Öffnen/Speichern, folgende Informationen:
Öffnen und Speichern von Dateien:
Dateiformat:
Kodierung: Unicode (utf8)
Zeilenende: Unix
Ohne es zu wissen, habe ich also Unicode (utf8) verwendet, dementsprechend musste ich auch die Umwandlung:
QString::fromUtf8 ( const char * utf8, int len = -1 ) verwenden.
Returns the Unicode string decoded from the first len bytes of utf8, ignoring the rest of utf8. If len is -1 then the length of utf8 is used. If len is bigger than the length of utf8 then it will use the length of utf8.
Wenn man eine Datei unter KDevelop öffnet, hat man auch noch die Möglichkeit den Zeichensatz der entsprechenden Datei zu ändern, denn ganz oben rechts, wird der verwendete angezeigt, bei mir: utf8, mit der Möglichkeit, einen anderen einzustellen.
Da ich bei diesen Einstellungen grundsätzlich nichts verändert hatte, habe ich wie gesagt, immer utf8 verwendet, ohne diesem Zustand bisher große Aufmerksamkeit zu schenken. Von nun ab, werde ich dem verwendetem Zeichensatz immer meine Aufmerksamkeit zuteil werden lassen, insbesonders bei Programmierarbeiten.
Unabhängig davon, weil mich das Problem so genervt hat, habe ich mir mal die Sache unter Windows XP angeschaut.
QString s7=QString("ÄÖÜ, äöüß"); //Eingabe unter XP, Visuall C++ 6.0 ,geht
p.drawText(20,620,s7);
QString s33;
s33.sprintf("Hööööööööööhe (neuer Test) in mm: %d",789); //von Programmer's File Editor unter XP,geht
p.drawText(20,580,s33);
Es wurden an Visuall C++ 6.0 und an Programmer's File Editor keinerlei Änderungen durchgeführt und obige Zeilen funktionierten sofort, mit der gewünschten Ausgabe, d.h., die Umlaute werden richtig dargestellt. Der verwendete Zeichensatz war bei beiden Programmen: Western
SO-8859-1).
Wünschen würde ich mir persönlich, das diese Problematik in den Programmierbüchern zu Qt erscheinen würde und zwar beim ersten Kapitel, beim ersten Programm. Denn bereits hier arbeitet man mit einem Editor, der einen bestimmten Zeichensatz benützt, der beachtet werden muss. Ich habe bereits mit drei verschiedenen Büchern zu Qt gearbeitet, um in die Programmierung unter Qt einzusteigen und in keinem wird diese Problematik erwähnt. Bei den englischen Büchern würde ich das ja noch verstehen, aber bei den deutschen Büchern, kann ich das nicht nachvollziehen, da wir nun mal die Umlaute in unsere Sprache haben und die entsprechende Problematik demzufolge auch behandelt werden muss.
Ich hoffe, das dieser Beitrag dazu dient, zum einen, diese Problematik bekannt zu machen und zum anderen, eine Lösungsmöglichkeit bietet, damit andere Benützer, die in die Programmiersprache Qt einsteigen wollen, besonders unter Linux, nicht von diesem Problem betroffen werden, dessen Lösung mich schon einiges an Zeit und Nerven gekostet hat
.
In diesem Sinne, nochmals Danke, an alle, die zur Lösungsfindung beigetragen haben und fröhliches programmieren auch weiterhin, denn das nächste Problem kommt bestimmt.
Mit freundlichen Grüßen
barton2500
Code-Auszug:
QString s7;
s7.sprintf("Schöne Umlaute: ÖÄÜ, öäü");
p.drawText(20,580, QString::fromUtf8(s7) );
Ich wusste nicht, dass es entscheidend sein kann, in welcher Art und Weise der verwendete Editor kodiert. Aber in diesem Fall, ist dies entscheidend, denn in dessen Abhängigkeit muss man dann den Zeichensatz codieren unter Qt.
Ich habe als Editor unter anderem KDevelop benutzt, ohne dort irgend welche großartigen Einstellungen zu verändern. Dort findet man unter Einstellungen->Editor-Einstellungen->Öffnen/Speichern, folgende Informationen:
Öffnen und Speichern von Dateien:
Dateiformat:
Kodierung: Unicode (utf8)
Zeilenende: Unix
Ohne es zu wissen, habe ich also Unicode (utf8) verwendet, dementsprechend musste ich auch die Umwandlung:
QString::fromUtf8 ( const char * utf8, int len = -1 ) verwenden.
Returns the Unicode string decoded from the first len bytes of utf8, ignoring the rest of utf8. If len is -1 then the length of utf8 is used. If len is bigger than the length of utf8 then it will use the length of utf8.
Wenn man eine Datei unter KDevelop öffnet, hat man auch noch die Möglichkeit den Zeichensatz der entsprechenden Datei zu ändern, denn ganz oben rechts, wird der verwendete angezeigt, bei mir: utf8, mit der Möglichkeit, einen anderen einzustellen.
Da ich bei diesen Einstellungen grundsätzlich nichts verändert hatte, habe ich wie gesagt, immer utf8 verwendet, ohne diesem Zustand bisher große Aufmerksamkeit zu schenken. Von nun ab, werde ich dem verwendetem Zeichensatz immer meine Aufmerksamkeit zuteil werden lassen, insbesonders bei Programmierarbeiten.
Unabhängig davon, weil mich das Problem so genervt hat, habe ich mir mal die Sache unter Windows XP angeschaut.
QString s7=QString("ÄÖÜ, äöüß"); //Eingabe unter XP, Visuall C++ 6.0 ,geht
p.drawText(20,620,s7);
QString s33;
s33.sprintf("Hööööööööööhe (neuer Test) in mm: %d",789); //von Programmer's File Editor unter XP,geht
p.drawText(20,580,s33);
Es wurden an Visuall C++ 6.0 und an Programmer's File Editor keinerlei Änderungen durchgeführt und obige Zeilen funktionierten sofort, mit der gewünschten Ausgabe, d.h., die Umlaute werden richtig dargestellt. Der verwendete Zeichensatz war bei beiden Programmen: Western
Wünschen würde ich mir persönlich, das diese Problematik in den Programmierbüchern zu Qt erscheinen würde und zwar beim ersten Kapitel, beim ersten Programm. Denn bereits hier arbeitet man mit einem Editor, der einen bestimmten Zeichensatz benützt, der beachtet werden muss. Ich habe bereits mit drei verschiedenen Büchern zu Qt gearbeitet, um in die Programmierung unter Qt einzusteigen und in keinem wird diese Problematik erwähnt. Bei den englischen Büchern würde ich das ja noch verstehen, aber bei den deutschen Büchern, kann ich das nicht nachvollziehen, da wir nun mal die Umlaute in unsere Sprache haben und die entsprechende Problematik demzufolge auch behandelt werden muss.
Ich hoffe, das dieser Beitrag dazu dient, zum einen, diese Problematik bekannt zu machen und zum anderen, eine Lösungsmöglichkeit bietet, damit andere Benützer, die in die Programmiersprache Qt einsteigen wollen, besonders unter Linux, nicht von diesem Problem betroffen werden, dessen Lösung mich schon einiges an Zeit und Nerven gekostet hat
In diesem Sinne, nochmals Danke, an alle, die zur Lösungsfindung beigetragen haben und fröhliches programmieren auch weiterhin, denn das nächste Problem kommt bestimmt.
Mit freundlichen Grüßen
barton2500
Betriebssystem: Suse 9.2, Motherboard: Asus A7N8X-E Deluxe,wireless edition.