QLabel , QString encoding von Sonderzeichen

Alles rund um die Programmierung mit Qt
Antworten
Salvator
Beiträge: 10
Registriert: 10. Oktober 2012 16:26

QLabel , QString encoding von Sonderzeichen

Beitrag von Salvator »

Hallo,
habe folgendes Problem was ich noch nicht ganz verstanden habe.

Meine QT-Anwendung läuft in mehreren Ländern und jedes Land hat seine eigenen Sonderzeichen, meine Anwendung bekommt die Texte per TCP/IP gesendet.
Jetzt habe ich mal alle Sonderzeichen die bei mir im moment so vorkommen in den Texten in einen zusammen geschrieben.
"à°ç§éùè¨ÄÖÜüäößòè¡ñçáéšěčířž"

Wenn ich diese Zeichen direkt im QT-Creator / Designer der Text-Eigenschaft von QLabel zuweise werden alle Zeichen angezeigt
Alle.gif
Alle.gif (30.78 KiB) 4417 mal betrachtet
kommt der Text über die Schnittstelle wird der Text in ein QLabel gespeichert wird dies über qDebug() ausgegeben sind alle Zeichen vorhanden und werden auch richtig in der Konsole angezeigt.
Weise ich jetzt aber über myLabel.setText(myQString) den Text meinem Label zu fehlen Zeichen
Zeichenfehlen.gif
Zeichenfehlen.gif (48.72 KiB) 4417 mal betrachtet
ich habe auch schon folgendes versucht

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

aber dann werden es nur weniger Zeichen und in der qDebug-Ausgabe stehen viele ??????

Schaue ich in meine ui_....h wo mein Qlabel definiert ist sieht das so aus
myLabel->setText(QApplication::translate("Display_z03", "\303\240\302\260\303\247\302\247\303\251\303\271\303\250\302\250\303\204\303\226\303\234\303\274\303\244\303\266\303\237\303\262\303\250\302\241\303\261\303\247\303\241\303\251\305\241\304\233\304\215\303\255\305\231\305\276", 0, QApplication::UnicodeUTF-8);

der local Codec => QTextCodec::codecForLocale()->name(); ist "ISO 8859-1"

Jetzt meine Fragen:
Muss ich meinen QString nach den Sonderzeichen durchsuchen und wenn eines vorhanden ist das Zeichen aus dem QString entfernen und durch z.B. \276 ersezten?
Die Anwendung die die Texte sendet nutzt unicode und sendet das auch so rüber und im QString(ist ja auch unicode) steht es ja auch richtig drin und die Schriftartkann die Zeichen ja auch sonst würde es ja bei direkter Zuweisung auch nicht gehen.

Danke schon mal für eure Hilfe

Gruß
Salvator
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QLabel , QString encoding von Sonderzeichen

Beitrag von Christian81 »

Im Quellcode sollte man niemals Sonderzeichen benutzen - notfalls mit tr() und per linguist übersetzen. Wenn Du unter Linux ein Char-Array in einen QString wandeln willst, so musst Du das Encoding deines Systems kennen. Meist ist dies UTF-8 - also QString::fromUtf8(). Unter Windows ist dies aber (zumindest in den alten Versionen, k.A. wie es aktuell aussieht) die aktuelle Spracheinstellung.
Wenn Du Daten über TCP/IP sendest dann musst Du ja auch wissen in welchen Encoding Du diese Daten über die Leitung schickst. Von diesem Encoding musst du dann beim Auslesen wieder in einen QString wandeln. Ich würde dazu UTF-8 nehmen - also QString().toUtf8() und QString::fromUtf8()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Salvator
Beiträge: 10
Registriert: 10. Oktober 2012 16:26

Re: QLabel , QString encoding von Sonderzeichen

Beitrag von Salvator »

Danke Christian!

Funktioniert vermutlich hat wirklich das Encoding vom Sender nicht gepasst.
Jetzt sag ich beim Senden expliziert UTF8 und beim Empfang fromUtf8 und schon funktionierts.

Danke!
Antworten