diff options
-rw-r--r-- | src/corelib/codecs/qtextcodec.h | 3 | ||||
-rw-r--r-- | src/corelib/xml/qxmlstream.cpp | 4 | ||||
-rw-r--r-- | tests/auto/qxmlstream/tst_qxmlstream.cpp | 16 |
3 files changed, 20 insertions, 3 deletions
diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h index 75aafdd..d61cd6b 100644 --- a/src/corelib/codecs/qtextcodec.h +++ b/src/corelib/codecs/qtextcodec.h @@ -167,6 +167,9 @@ public: private: const QTextCodec *c; QTextCodec::ConverterState state; + + friend class QXmlStreamWriter; + friend class QXmlStreamWriterPrivate; }; class Q_CORE_EXPORT QTextDecoder { diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index 9f8867f..f987a31 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -3006,7 +3006,7 @@ QXmlStreamWriterPrivate::QXmlStreamWriterPrivate(QXmlStreamWriter *q) #ifndef QT_NO_TEXTCODEC codec = QTextCodec::codecForMib(106); // utf8 encoder = codec->makeEncoder(); - encoder->fromUnicode(QLatin1String("")); // no byte order mark for utf8 + encoder->state.flags |= QTextCodec::IgnoreHeader; // no byte order mark for utf8 #endif inStartElement = inEmptyElement = false; wroteSomething = false; @@ -3282,7 +3282,7 @@ void QXmlStreamWriter::setCodec(QTextCodec *codec) delete d->encoder; d->encoder = codec->makeEncoder(); if (codec->mibEnum() == 106) - d->encoder->fromUnicode(QLatin1String("")); // no byte order mark for utf8 + d->encoder->state.flags |= QTextCodec::IgnoreHeader; // no byte order mark for utf8 } } diff --git a/tests/auto/qxmlstream/tst_qxmlstream.cpp b/tests/auto/qxmlstream/tst_qxmlstream.cpp index 62cb54d..6aa9955 100644 --- a/tests/auto/qxmlstream/tst_qxmlstream.cpp +++ b/tests/auto/qxmlstream/tst_qxmlstream.cpp @@ -559,6 +559,7 @@ private slots: void hasAttributeSignature() const; void hasAttribute() const; void writeWithCodec() const; + void writeWithUtf8Codec() const; void writeWithStandalone() const; void entitiesAndWhitespace_1() const; void entitiesAndWhitespace_2() const; @@ -1303,7 +1304,6 @@ void tst_QXmlStream::hasAttribute() const void tst_QXmlStream::writeWithCodec() const { - QByteArray outarray; QXmlStreamWriter writer(&outarray); writer.setAutoFormatting(true); @@ -1326,6 +1326,20 @@ void tst_QXmlStream::writeWithCodec() const QVERIFY(outarray.contains(codec->name())); } +void tst_QXmlStream::writeWithUtf8Codec() const +{ + QByteArray outarray; + QXmlStreamWriter writer(&outarray); + + QTextCodec *codec = QTextCodec::codecForMib(106); // utf-8 + QVERIFY(codec); + writer.setCodec(codec); + + writer.writeStartDocument("1.0"); + static const char begin[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; + QVERIFY(outarray.startsWith(begin)); +} + void tst_QXmlStream::writeWithStandalone() const { { |