diff options
author | hjk <[email protected]> | 2025-07-01 09:41:47 +0200 |
---|---|---|
committer | hjk <[email protected]> | 2025-07-02 05:23:36 +0000 |
commit | a104676c2bf45b2ce533c33f7ff32ca31ec5319e (patch) | |
tree | 1eeae1b97452702fc899143feff5562a3b687d59 | |
parent | 8c80e67b75acd85fe088eac07466aeee298094a2 (diff) |
QStringConverter::availableCodecs() and QTextCodecs::availableCodecs()
are not interchangable.
Note: To be feature-equivalent this requires a Qt build with ICU,
which is not the case for pre-build Qt versions on Windows before
6.10.
Amends 0c45ab6f4.
Change-Id: I716b0c758be58ae6134a46d4dd341e8c7c5a11bc
Reviewed-by: David Schulz <[email protected]>
-rw-r--r-- | src/libs/utils/textcodec.cpp | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/libs/utils/textcodec.cpp b/src/libs/utils/textcodec.cpp index d8a11caad2b..9d379124e6c 100644 --- a/src/libs/utils/textcodec.cpp +++ b/src/libs/utils/textcodec.cpp @@ -3,7 +3,6 @@ #include "textcodec.h" -#include "algorithm.h" #include "qtcassert.h" #include <QHash> @@ -127,22 +126,28 @@ QList<int> TextEncoding::availableMibs() return QTextCodec::availableMibs(); } -static QList<TextEncoding> getAvailableEncoding() -{ - std::set<QByteArray> encodingNames; - - const QList<QByteArray> codecs = QTextCodec::availableCodecs(); - for (const QByteArray &codec : codecs) - encodingNames.insert(codec); - - return Utils::transform<QList<TextEncoding>>(encodingNames, [](const QByteArray &name) { - return TextEncoding(name); - }); -} - const QList<TextEncoding> &TextEncoding::availableEncodings() { - static const QList<TextEncoding> theAvailableEncoding = getAvailableEncoding(); + static const QList<TextEncoding> theAvailableEncoding = [] { + QList<TextEncoding> encodings; +#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) + std::set<QString> encodingNames; + const QList<QString> codecs = QStringConverter::availableCodecs(); + for (const QString &name : codecs) { + const auto [_, inserted] = encodingNames.insert(name); + QTC_ASSERT(inserted, continue); + TextEncoding encoding(name.toUtf8()); + QTC_ASSERT(encoding.isValid(), continue); + encodings.append(encoding); + } +#else + // Before Qt 6.7, QStringConverter::availableCodecs did not exist, + // even if Qt was built with ICU. Offer at least the well-known ones. + for (int enc = 0; enc < QStringConverter::Encoding::LastEncoding; ++enc) + encodings.append(TextEncoding(QStringConverter::Encoding(enc))); +#endif + return encodings; + }(); return theAvailableEncoding; } @@ -156,8 +161,7 @@ void TextEncoding::setEncodingForLocale(const QByteArray &codecName) TextEncoding TextEncoding::encodingForLocale() { - return TextEncoding(QTextCodec::codecForLocale()->name()); - // return theEncodingForLocale; + return theEncodingForLocale; } TextEncoding TextEncoding::encodingForMib(int mib) |