[gelöst] QSettings Daten lesen UTF-8 Hebrew

Alles rund um die Programmierung mit Qt
Antworten
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

[gelöst] QSettings Daten lesen UTF-8 Hebrew

Beitrag 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:

Code: Alles auswählen

[Genesis]
1:1=בראשית ברא אלהים את השמים ואת הארץ
:cry:
Zuletzt geändert von 24dan am 14. Januar 2010 16:45, insgesamt 1-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
mabralume
Beiträge: 39
Registriert: 26. April 2007 11:54
Wohnort: Siegen
Kontaktdaten:

Beitrag von mabralume »

Ist denn die Datei selber in utf-8 abgespeichert ?

mfg
MB
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
mabralume
Beiträge: 39
Registriert: 26. April 2007 11:54
Wohnort: Siegen
Kontaktdaten:

Beitrag von mabralume »

Welche Qt-Version benutzt Du ? Ich finde die Funktion setIniCodec nicht .

mfg
MB
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag 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.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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(, ) :cry:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
mabralume
Beiträge: 39
Registriert: 26. April 2007 11:54
Wohnort: Siegen
Kontaktdaten:

Beitrag 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 :D

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 .
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag 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());
mabralume
Beiträge: 39
Registriert: 26. April 2007 11:54
Wohnort: Siegen
Kontaktdaten:

Beitrag von mabralume »

... :o GENAU QString::fromUtf8 war es was ich im vorigen Post schreiben wollte, @archer hat Recht, probier's mal damit .

mfg
MB
Ein Programmierer ist ein Tool, was Coffein in Code umwandelt.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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!)

Code: Alles auswählen

  settings.beginGroup("Test");
  settings.endGroup();
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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::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:
אלה יעקב איש וביתו באו
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Antworten