From dd3f1f594ed7f453841eb51ee43a62b9583c9e2a Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 13 May 2020 18:41:56 +0200 Subject: [PATCH] Don't use QTextCodec which will be moved to libQt5Compat in Qt 6 --- CMakeLists.txt | 2 +- gui/mainwindow.cpp | 2 -- misc/utility.cpp | 38 ++++++++++++++++++++++++-------------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 88903e4..912222b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(META_GUI_OPTIONAL true) set(META_JS_SRC_DIR renamingutility) set(META_VERSION_MAJOR 3) set(META_VERSION_MINOR 3) -set(META_VERSION_PATCH 7) +set(META_VERSION_PATCH 8) set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON) # add project files diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 694cb89..8273650 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -27,8 +27,6 @@ #include #include #include -#include -#include #include diff --git a/misc/utility.cpp b/misc/utility.cpp index 15f377d..c4d346b 100644 --- a/misc/utility.cpp +++ b/misc/utility.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -17,7 +18,6 @@ #include #include #include -#include #include #include @@ -86,12 +86,15 @@ QString dataToQString(const char *data, size_t dataSize, TagTextEncoding encodin default:; } - const char *const codecName = textEncodingToCodecName(encoding); - const auto *codec = QTextCodec::codecForName(codecName); - if (!codec) { - codec = QTextCodec::codecForLocale(); - } - return codec->toUnicode(data, static_cast(dataSize)); + const auto utf16Data = CppUtilities::convertString(textEncodingToCodecName(encoding), +#if defined(CONVERSION_UTILITIES_BYTE_ORDER_LITTLE_ENDIAN) + "UTF-16LE", +#else + "UTF-16BE", +#endif + data, dataSize, 2.0f); + return QString::fromUtf16( + reinterpret_cast(utf16Data.first.get()), static_cast(utf16Data.second / (sizeof(ushort) / sizeof(char)))); } QString stringToQString(const string &value, TagTextEncoding textEncoding) @@ -121,13 +124,20 @@ string qstringToString(const QString &value, TagTextEncoding textEncoding) encodedString = QByteArray( reinterpret_cast(value.utf16()), static_cast(value.size() * static_cast(sizeof(ushort) / sizeof(char)))); break; - default: { - const char *const codecName = textEncodingToCodecName(textEncoding); - auto *codec = QTextCodec::codecForName(codecName); - if (!codec) { - codec = QTextCodec::codecForLocale(); - } - encodedString = codec->fromUnicode(value); +#if defined(CONVERSION_UTILITIES_BYTE_ORDER_LITTLE_ENDIAN) + case TagTextEncoding::Utf16BigEndian: { +#else + case TagTextEncoding::Utf16LittleEndian: { +#endif + const auto utf16Data = CppUtilities::convertString( +#if defined(CONVERSION_UTILITIES_BYTE_ORDER_LITTLE_ENDIAN) + "UTF-16LE", +#else + "UTF-16BE", +#endif + textEncodingToCodecName(textEncoding), reinterpret_cast(value.utf16()), + static_cast(value.size() * static_cast(sizeof(ushort) / sizeof(char))), 2.0f); + return string(utf16Data.first.get(), utf16Data.second); } } return string(encodedString.data(), static_cast(encodedString.size()));