Seite 1 von 1
[gelöst] QSettings Daten lesen UTF-8 Hebrew
Verfasst: 14. Januar 2010 14:06
von 24dan
Hallo ich versuche einen String aus einer INI Datei mit eigenem Suffix zu lesen.
Problem: bekomme keine Daten
Funktionen zum Lesen:
Code: Alles auswählen
QSettings settings("genesis.myfile",QSettings::NativeFormat,this);
settings.setIniCodec("UTF-8");
settings.beginGroup("Genesis");
QString line1 = settings.value("1:1").toString();
settings.endGroup();
qDebug()<<line1;
textEdit->setPlainText(line1);
Inhalt des genesis.myfile mit hebrew letters:

Verfasst: 14. Januar 2010 14:22
von mabralume
Ist denn die Datei selber in utf-8 abgespeichert ?
mfg
MB
Verfasst: 14. Januar 2010 14:24
von 24dan
ja wenn ich davon ausgehen kann das Texteditor/speichern/Format:UTF-8 auch UTF-8 ist.
Bin flexibel und auch für andere Lösungen offen:
Bedingung:
Daten sollten über settings lesbar sein.
Verfasst: 14. Januar 2010 14:35
von mabralume
Welche Qt-Version benutzt Du ? Ich finde die Funktion setIniCodec nicht .
mfg
MB
Verfasst: 14. Januar 2010 14:39
von 24dan
QT 4.6 + Windows XP
Code: Alles auswählen
void QSettings::setIniCodec ( QTextCodec * codec )
Sets the codec for accessing INI files (including .conf files on Unix) to codec. The codec is used for decoding any data that is read from the INI file, and for encoding any data that is written to the file. By default, no codec is used, and non-ASCII characters are encoded using standard INI escape sequences.
Warning: The codec must be set immediately after creating the QSettings object, before accessing any data.
This function was introduced in Qt 4.5.
Verfasst: 14. Januar 2010 14:46
von archer
Was ist denn überhaupt in dem ausgelesenen QVariant drin?
Vielleicht geht toString() ja nicht so ohne weiteres, bzw. er Inhalt muß auf anderem Wege in den QString.
Verfasst: 14. Januar 2010 14:54
von 24dan
Code: Alles auswählen
QSettings settings("genesis.myfile",QSettings::NativeFormat,this);
settings.setIniCodec("UTF-8");
settings.beginGroup("Genesis");
qDebug()<<settings.value("1:1");
settings.endGroup();
QVariant(, )

Verfasst: 14. Januar 2010 14:54
von mabralume
Ah, ja, ich hab 4.4.3, da is die Funktion noch nicht drin. Hmmm, ich hatte da nie Probleme...
Ne Möglichkeit, das Textencoding korrekt zu ermitteln ist hier :
http://codesnipers.com/?q=node/68 beschrieben. Ein Editor der das Abspeichern auf alle Fälle richtig macht ist gedit
http://projects.gnome.org/gedit/ .
Ich weiß jetzt nicht, ob man QString eventuell auch noch die korrekte Codierung mitgeben sollten ...
Hast Du mal im hexdump geschaut, was im resultierenden QString drinsteht ?
sorry wenn ich da nit weiterhelfen kann.
mfg
MB
p.s.:
Zusätzlich benutze ich für reine ini-Dateien die Api-funktionen von Windows GetPrivateProfileString/WritePrivateProfileString ... ist vlcht. ne alternative wenn man nur unter Windows programmiert .
Verfasst: 14. Januar 2010 15:02
von archer
ich meinte schau dir mal von QVariant type() und canConvert() an.
Evtl. mußst du ja so etwas in der Art machen
Code: Alles auswählen
QByteArray array = settings.value("1:1").toByteArray();
QString line1 = QString::fromUtf8(array.data());
Verfasst: 14. Januar 2010 15:10
von mabralume
...

GENAU
QString::fromUtf8 war es was ich im vorigen Post schreiben wollte, @archer hat Recht, probier's mal damit .
mfg
MB
Verfasst: 14. Januar 2010 16:04
von 24dan
Danke an Euch beide
archer & mabralume
folgende Fehler:
1. im INI file müssen Strings in ""
2. QSettings::IniFormat
3. .toString(); funktioniert
Komplett sieht das jetzt so aus:
genesis.myfile Inhalt:
Code: Alles auswählen
[General]
1:1="ואלה שמות בני ישראל הבאים מצרימה את יעקב איש וביתו באו"
Funktion Lesen:
Code: Alles auswählen
QSettings settings("genesis.myfile",QSettings::IniFormat,this);
settings.setIniCodec("UTF-8");
QString a = settings.value("aber").toString();
textEdit->setPlainText(a);
Letztes Problem:
Wenn ich eine andere Gruppe als [General] benutze kann ich nichts lesen. Auch geht das Lesen schief wenn ich General als Gruppe extra vorher aufrufe.
Das z.B. klappt nicht: ("Test" ist natürlich in genesis.myfile eingetragen!)
Verfasst: 14. Januar 2010 16:18
von 24dan
Okay ist wohl ein Verständnisproblem von mir:
Wenn ich zwei Gruppen anlege kann?/muss? ich auf die erste ohne beginGroup zugreifen auf die i+1 muss ich mit Gruppennamen zugreifen.

:roll::roll:
Also ganz verstehen tu ich das net.
Code: Alles auswählen
QSettings settings("genesis.myfile",QSettings::IniFormat,this);
settings.setIniCodec("UTF-8");
settings.beginGroup("test2");
QString a = settings.value("1:1").toString();
settings.endGroup();
textEdit->setPlainText(a);
+
genesis.myfile:
Code: Alles auswählen
[test1]
aber="test"
1:1="ואלה שמות בני ישראל הבאים מצרימה את יעקב איש וביתו באו
"
[test2]
1:1="ואלה יעקב איש וביתו באו
"
Ausgabe:
אלה יעקב איש וביתו באו