diff --git a/src/corelib/serialization/qcborvalue.cpp b/src/corelib/serialization/qcborvalue.cpp index b83ce226dc..ac8ba481dd 100644 --- a/src/corelib/serialization/qcborvalue.cpp +++ b/src/corelib/serialization/qcborvalue.cpp @@ -1065,6 +1065,12 @@ Q_NEVER_INLINE void QCborContainerPrivate::appendAsciiString(QStringView s) qt_to_latin1_unchecked(l, s.utf16(), len); } +void QCborContainerPrivate::appendNonAsciiString(QStringView s) +{ + appendByteData(reinterpret_cast(s.utf16()), s.size() * 2, + QCborValue::String, QtCbor::Element::StringIsUtf16); +} + QCborValue QCborContainerPrivate::extractAt_complex(Element e) { // create a new container for the returned value, containing the byte data diff --git a/src/corelib/serialization/qcborvalue_p.h b/src/corelib/serialization/qcborvalue_p.h index 9fa640fd63..ec8d559fd0 100644 --- a/src/corelib/serialization/qcborvalue_p.h +++ b/src/corelib/serialization/qcborvalue_p.h @@ -228,13 +228,14 @@ public: void append(QLatin1StringView s) { if (!QtPrivate::isAscii(s)) - return append(QString(s)); + return appendNonAsciiString(QString(s)); // US-ASCII is a subset of UTF-8, so we can keep in 8-bit appendByteData(s.latin1(), s.size(), QCborValue::String, QtCbor::Element::StringIsAscii); } void appendAsciiString(QStringView s); + void appendNonAsciiString(QStringView s); void append(const QString &s) { @@ -246,8 +247,7 @@ public: if (QtPrivate::isAscii(s)) appendAsciiString(s); else - appendByteData(reinterpret_cast(s.utf16()), s.size() * 2, - QCborValue::String, QtCbor::Element::StringIsUtf16); + appendNonAsciiString(s); } void append(const QCborValue &v) {