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]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.