summaryrefslogtreecommitdiffstats
path: root/src/corelib/serialization
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-04-28 17:01:11 +0200
committerLars Knoll <lars.knoll@qt.io>2020-05-14 07:50:13 +0200
commit33bb695a2895fb7199b256a4fd76923c32a8587a (patch)
tree78bcb9e1611433be28bd788040db7972017976b8 /src/corelib/serialization
parent8835c64f795b641619b852c2055605afd9d16442 (diff)
Start porting QTextStream away from QTextCodec
As a first step add setEncoding/encoding() methods that use the QStringConverter::Encoding enum, and port all uses of setCodec()/ codec() over to the new API. Internally QTextStream still uses QTextCodec, this will be ported over to QStringConverter in a follow-up change. Change-Id: Icd764cf47b449b57f4ebd010c2dad89e6717d6c0 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/serialization')
-rw-r--r--src/corelib/serialization/qtextstream.cpp39
-rw-r--r--src/corelib/serialization/qtextstream.h3
-rw-r--r--src/corelib/serialization/qtextstream_p.h1
3 files changed, 43 insertions, 0 deletions
diff --git a/src/corelib/serialization/qtextstream.cpp b/src/corelib/serialization/qtextstream.cpp
index a2af401a41..df683d74da 100644
--- a/src/corelib/serialization/qtextstream.cpp
+++ b/src/corelib/serialization/qtextstream.cpp
@@ -3157,6 +3157,45 @@ QTextStream &bom(QTextStream &stream)
} // namespace Qt
+
+/*!
+ Sets the encoding for this stream to \a encoding. The encoding is used for
+ decoding any data that is read from the assigned device, and for
+ encoding any data that is written. By default,
+ QStringConverter::Utf8 is used, and automatic unicode
+ detection is enabled.
+
+ If QTextStream operates on a string, this function does nothing.
+
+ \warning If you call this function while the text stream is reading
+ from an open sequential socket, the internal buffer may still contain
+ text decoded using the old encoding.
+
+ \sa encoding(), setAutoDetectUnicode(), setLocale()
+*/
+void QTextStream::setEncoding(QStringConverter::Encoding encoding)
+{
+ Q_D(QTextStream);
+ d->encoding = encoding;
+#if QT_CONFIG(textcodec)
+ // FIXME: This is temporary until QTextStream is converted to use QStringConverter
+ const char *name = QStringConverter::nameForEncoding(encoding);
+ auto codec = QTextCodec::codecForName(name);
+ setCodec(codec);
+#endif
+}
+
+/*!
+ Returns the encoding that is current assigned to the stream.
+
+ \sa setEncoding(), setAutoDetectUnicode(), locale()
+*/
+QStringConverter::Encoding QTextStream::encoding() const
+{
+ Q_D(const QTextStream);
+ return d->encoding;
+}
+
/*!
Sets the codec for this stream to \a codec. The codec is used for
decoding any data that is read from the assigned device, and for
diff --git a/src/corelib/serialization/qtextstream.h b/src/corelib/serialization/qtextstream.h
index 97d596137e..9daa87947c 100644
--- a/src/corelib/serialization/qtextstream.h
+++ b/src/corelib/serialization/qtextstream.h
@@ -45,6 +45,7 @@
#include <QtCore/qchar.h>
#include <QtCore/qlocale.h>
#include <QtCore/qscopedpointer.h>
+#include <QtCore/qstringconverter.h>
#include <stdio.h>
@@ -98,6 +99,8 @@ public:
explicit QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly);
virtual ~QTextStream();
+ void setEncoding(QStringConverter::Encoding encoding);
+ QStringConverter::Encoding encoding() const;
#if QT_CONFIG(textcodec)
void setCodec(QTextCodec *codec);
void setCodec(const char *codecName);
diff --git a/src/corelib/serialization/qtextstream_p.h b/src/corelib/serialization/qtextstream_p.h
index 172824d27d..2cf548bca6 100644
--- a/src/corelib/serialization/qtextstream_p.h
+++ b/src/corelib/serialization/qtextstream_p.h
@@ -118,6 +118,7 @@ public:
int stringOffset;
QIODevice::OpenMode stringOpenMode;
+ QStringConverter::Encoding encoding = QStringConverter::Utf8;
#if QT_CONFIG(textcodec)
// codec
QTextCodec *codec;