Re: Kann unter Qt mit Suse 9.2 keine Umlaute ausgeben.
Stefan Hundhammer <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Organization | SuSE Linux AG |
| Message-ID | <[email protected]> |
On Friday 20 May 2005 06:37, Peter Wabersich wrote:
> ich kann keine Umlaute unter Qt 3.3.3 unter Suse 9.2 ausgeben.
> (Qt wurde mit Yast installiert.)
Es ist völlig wurscht, wie man ein RPM installiert. YaST2 verwendet auch
nichts anderes als "rpm".
>
> 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 );
^^^^^^
Umlaute in ISO-8859-15 (oder -1) - also Latin-1 - wetten?
> p.drawText(20,560,s2);
> ....
>
> Jedes "ö" wird mit zwei Zeichen dargestellt bei der Ausgabe und eben
> nicht als "ö".
Eben. Du gibst in deinem Editor Umlaute in ISO-8859 ein, in deinem Qt-Programm
aber mit Unicode / UTF-8 aus. Das KANN nicht gehen.
> Andere Textausgaben funktionieren ohne Probleme auf diese
> Art und Weise, eben nur keine Umlaute!
Klar. Daà die 128 Zeichen, die sie selber brauchen, einfach immer
funktionieren, dafÃŒr haben die Amis mit dem uralten ASCII-Code schon gesorgt
- aber der hat eben nur 7 Bit, alles ÃŒber Zeichen Nr. 127 ist undefiniert.
Alle (ÃŒblichen) anderen Codierungen sind nur Erweiterungen von ASCII, d.h.
[a-zA-Z0-9] und gebrÀuchliche Sonderzeichen (".,;/()[]{}...") sind eh immer
gleich - aber eben nicht landesspezifische Sonderzeichen wie Umlaute.
Um nicht nur hier in Mitteleuropa auf der Insel der Seligen zu leben, haben
wir (SuSE) vor einigen Distributionen das System-Encoding auf UTF-8
umgestellt - dann kann dir auch der Kollege aus Prag eine Mail schicken, und
du siehst seinen Namen richtig mit allen Sonderzeichen, die es in ISO-8859-1
(oder -15, das ist mehr oder weniger das gleiche nur mit Euro-Zeichen drin)
eben nicht gibt.
In Mittel- und Westeuropa hatten wir vorher ÃŒblicherweise ISO-8859-1, in
Osteuropa ISO-8859-2. Dort, wo bei uns die Umlaute sind, sind bei den
Nachbarn im Osten eben diverse Zeichen mit Akzenten, die es in Westeuropa
eben nicht gibt. Das heiÃt, daà man beides gleichzeitig mit dieser Methode
nicht darstellen kann.
Deshalb eben der Umstieg auf UTF-8. Auch das ist zu ASCII aufwÀrtskompatibel,
d.h. Zeichen unter 128 sind auch hier gleich. Bei Zeichen ÃŒber 128 gibt es
aber Steuersequenzen, die anzeigen, daà hier eben noch mehr Bytes kommen, die
das gleiche Zeichen beschreiben - und so wird aus einem "ö" eben ein "obacht,
hier kommt was Komisches" und dann ein "ö" - oder zumindest so in der Art.
Das hat auch noch den Nebeneffekt, daà man damit auch Schriftzeichen von
Sprachen darstellen kann, die so richtig anstÀndig viele davon haben -
chinesisch, japanisch, koreanisch. Und auch ganz andere, die mit ASCII nichts
gemeinsam haben, wie kyrillisch oder griechisch.
Damit kann man jetzt auch Spam von dort richtig schick dargestellt sehen, auch
wenn man es nach wie vor nicht lesen kann, weil man eben die Sprache nicht
versteht. ;-)
> Woran kann das liegen? Wie kann
> man dieses Problem lösen?
Solche Meldungen muÃt du explizit vom verwendeten Encoding nach Unicode
konvertieren - das verwendet Qt intern. Wenn du sicher bist, daà du dein
System richtig konfiguriert hast und auch dein Editor das System-Encoding
verwendet:
http://doc.trolltech.com/3.3/qstring.html#fromLocal8Bit
QString::fromLocal8Bit( "HÀllö Wölt!" );
Aber ich habe das GefÌhl, daà du deinen Editor fest auf ISO-8859-? eingestellt
hast, dann kann das auch in die Hose gehen. In diesem Fall solltest du lieber
explizit von ISO-8859-1 (Latin-1) nach Unicode konvertieren:
http://doc.trolltech.com/3.3/qstring.html#fromLatin1
QString::fromLatin1( "HÀllö Wölt!" );
Dazu sei noch angemerkt, daà das eigentlich auch nur GlÌckssache ist, weil
TrollTech selber eben auch in Norwegen und damit im Bereich des
WesteuropÀischen Encodings sitzt. Eine Funktion QString::fromLatin2() gibt es
nÀmlich z.B. nicht.
Haben wir's gut... ;-)
> 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?
Du willst das nicht am System verstellen. Wirklich nicht. Wenn du das tust,
wirst du dir sehr viel mehr Probleme einhandeln, als du jetzt hast.
Und du willst ja vielleicht auch, daà man dein Programm benutzen kann, ohne
Systemeinstellungen zu verÀndern!
Ãbrigens: Im Profi-Bereich hat man dieses Problem gar nicht erst, weil die
Originalmeldungen im Programm in Englisch geschrieben werden (also ASCII, und
das geht immer, dafÃŒr sorgen die Amis schon) und Ãbersetzungen - und darunter
fÀllt natÌrlich auch deutsch - mit GNU gettext oder Qt::tr() von externen
Files geladen werden, in denen explizit drinsteht, in welcher Codierung die
Zeichen sind, so daà automatisch umcodiert werden kann.
Willkommen in der wunderbaren Welt der Internationalisierung.
;-)
CU
--
Stefan Hundhammer <[email protected]> Penguin by conviction.
YaST2 Development
SUSE Linux Products GmbH
Nuernberg, Germany
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
[email protected]
Um eine Liste aller verfÃŒgbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]