aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <[email protected]>2025-07-01 09:41:47 +0200
committerhjk <[email protected]>2025-07-02 05:23:36 +0000
commita104676c2bf45b2ce533c33f7ff32ca31ec5319e (patch)
tree1eeae1b97452702fc899143feff5562a3b687d59
parent8c80e67b75acd85fe088eac07466aeee298094a2 (diff)
Utils: Use QStringConverter::availableCodecs()HEADmaster
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.cpp38
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)