Alles rund um die Programmierung mit Qt
-
patrik08
- Beiträge: 746
- Registriert: 27. Februar 2006 10:48
- Wohnort: DE Freiburg
Beitrag
von patrik08 »
Ich schreibe ein programm um auf dem server die db zu aktualisieren...
php5 schreib es so:
http://ppk.ciz.ch/format/sql/php5_export.sql
mit utf8_decode .... aus der selbe sqlite db
qt4 schreib es so:
http://ppk.ciz.ch/format/sql/qt_export.sql
mit toLatin1()...
das einzige gemeinsame format das ich gefunden habe ist toBase64 dort kommt es richtig....
zwischen ä und ä ist doch eine welt an unterschied oder?
ist das ein bug oder muss man mit #include <QTextCodec> arbeiten...
Code: Alles auswählen
bool file_put_contents_latin(QString fullFileName,QString xml)
{
/* xml incomming utf8 from xml or sqlite utf8 */
xml.prepend("macè"); /* latin = macé */
QByteArray base = xml.toLatin1();
/*QByteArray eutext = */
QFile f( fullFileName );
if ( f.open( QFile::WriteOnly | QFile::Text ) )
{
QTextStream sw( &f );
sw.setCodec("ISO 8859-1");
sw << base.data();
f.close();
return true;
}
return false;
}
-
patrik08
- Beiträge: 746
- Registriert: 27. Februar 2006 10:48
- Wohnort: DE Freiburg
Beitrag
von patrik08 »
40 zeilen um ueberhaubt ins latin1 abzuspeichern von utf8 ....
alle qstring tolatin1 ist nur ein kaputter spiegel..
Code: Alles auswählen
bool file_put_contents_latin(QString fullFileName,QString xml)
{
QTextCodec *codecutf8 = QTextCodec::codecForMib(106);
QTextCodec *codeclatin1 = QTextCodec::codecForMib(4);
QString tmpfilework = fullFileName+".tmplocks";
QByteArray data;
QFile filetmp(tmpfilework);
QFile endfile(fullFileName);
bool ok;
if(filetmp.open(QIODevice::WriteOnly)) {
QTextStream outtmp(&filetmp);
outtmp << xml; /* utf8 save default */
filetmp.close();
ok = true;
}
if (filetmp.open(QFile::ReadOnly | QFile::Text)) {
data = filetmp.readAll();
filetmp.remove(); /* close e remove */
ok = true;
}
if (ok && endfile.open(QFile::WriteOnly | QFile::Text)) {
QTextStream in(&data);
in.setAutoDetectUnicode(false);
in.setCodec(codecutf8);
QTextStream outfinal(&endfile);
outfinal.setCodec(codeclatin1);
outfinal << in.readAll(); /* convert yes or no! */
endfile.close();
return true;
}
return false;
}
-
patrik08
- Beiträge: 746
- Registriert: 27. Februar 2006 10:48
- Wohnort: DE Freiburg
Beitrag
von patrik08 »
Ich habe vergessen zu sagen was die codecForMib(int nummer) ist!
jede sprache hat seine nummer....
und qtextstream mit setCodec("ISO 8859-1"); anzusprechen hat mac sogar window nicht gerne und funktioniert nicht richtig...
alle nummer... liste...
http://www.iana.org/assignments/character-sets
so nun kann man im forum codecForMib suchen ... heute nur ein resultat dieses...