[Qt-interest] Have QXmlStreameWriter write the encoding information

Aleksandar Lazic al-qtinterest at none.at
Thu Jun 4 01:19:57 CEST 2009


On Mit 03.06.2009 23:08, Andreas Pakulat wrote:
>
>In fact, Qt's XmlStreamReader won't read the result back in, see this
>example:
>
>,----[ main.cpp ]-
>| #include <QtCore>
>| #include <QDebug>
>| #include <QtXml>
>| 
>| int main(int argc, char** argv)
>| {
>|     QString tmp;
>|     QXmlStreamWriter w(&tmp);

 From source:

### ./src/corelib/xml/qxmlstream.cpp
void QXmlStreamWriter::writeStartDocument(const QString &version)
{
     Q_D(QXmlStreamWriter);
     d->finishStartElement(false);
     d->write("<?xml version=\"");
     d->write(version);
     if (d->device) { // stringDevice does not get any encoding
         d->write("\" encoding=\"");
#ifdef QT_NO_TEXTCODEC
         d->write("iso-8859-1");
#else
         d->write(d->codec->name().constData());
#endif
     }
     d->write("\"?>");
}
###

Please can you try this:

####
#include <QtCore>
#include <QDebug>
#include <QtXml>

int main(int argc, char** argv)
{
     QString tmp;
     QByteArray tmp1;
     //QXmlStreamWriter w(&tmp);
     QXmlStreamWriter w(&tmp1);
     w.setCodec("ISO-8859-1");
     w.writeStartDocument("1.0");
     //w.writeProcessingInstruction("xml","version=\"1.0\" encoding=\"iso-8859-1\"");
     w.writeStartElement("test");
     w.writeCharacters(QString::fromUtf8("är"));
     w.writeEndElement();
     w.writeEndDocument();

     QFile file("test.xml");
     file.open( QIODevice::WriteOnly );
     QTextStream s(&file);
     s.setCodec(QTextCodec::codecForName("ISO-8859-1"));
     //s << tmp;
     s << tmp1;
     file.close();

     file.open( QIODevice::ReadOnly );
     QXmlStreamReader r(&file);
     while( !r.atEnd()) {
         QXmlStreamReader::TokenType t = r.readNext();
         qDebug() << t;
         if( t == QXmlStreamReader::Invalid ) {
             qDebug() << "invalid token, error:" << r.errorString();
         }
     }
}
####

My test.xml looks like this:

<?xml version="1.0" encoding="ISO-8859-1"?><test>är</test>

BR

Aleks



More information about the Qt-interest-old mailing list