QString & QByteArray kann kein sauberes ISO 8859-1

Alles rund um die Programmierung mit Qt
Antworten
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

QString & QByteArray kann kein sauberes ISO 8859-1

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 ....:shock:
alle qstring tolatin1 ist nur ein kaputter spiegel..:cry:

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...
Antworten