[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