diff --git a/apps/launcher/maindialog.cpp b/apps/launcher/maindialog.cpp index 9b89edd08a..309704c87f 100644 --- a/apps/launcher/maindialog.cpp +++ b/apps/launcher/maindialog.cpp @@ -7,13 +7,13 @@ #include #include #include -#include #include #include #include #include #include +#include #include "advancedpage.hpp" #include "datafilespage.hpp" @@ -323,7 +323,7 @@ bool Launcher::MainDialog::setupLauncherSettings() return false; } QTextStream stream(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); mLauncherSettings.readFile(stream); } @@ -359,7 +359,7 @@ bool Launcher::MainDialog::setupGameSettings() return {}; } QTextStream stream(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); (mGameSettings.*reader)(stream, ignoreContent); file.close(); @@ -559,7 +559,7 @@ bool Launcher::MainDialog::writeSettings() QTextStream stream(&file); stream.setDevice(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); mLauncherSettings.writeFile(stream); file.close(); diff --git a/apps/wizard/inisettings.cpp b/apps/wizard/inisettings.cpp index 5491d4bd02..1f8d29f71d 100644 --- a/apps/wizard/inisettings.cpp +++ b/apps/wizard/inisettings.cpp @@ -164,7 +164,11 @@ bool Wizard::IniSettings::writeFile(const QString& path, QTextStream& stream) if (file.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text)) { QTextStream in(&file); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) in.setCodec(stream.codec()); +#else + in.setEncoding(stream.encoding()); +#endif // Write the updated buffer to an empty file in << buffer; diff --git a/apps/wizard/mainwizard.cpp b/apps/wizard/mainwizard.cpp index 68ca8f6bf0..8d0c085b00 100644 --- a/apps/wizard/mainwizard.cpp +++ b/apps/wizard/mainwizard.cpp @@ -5,9 +5,9 @@ #include #include #include -#include #include +#include #include #include "componentselectionpage.hpp" @@ -165,7 +165,7 @@ void Wizard::MainWizard::setupGameSettings() return; } QTextStream stream(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); mGameSettings.readUserFile(stream); } @@ -197,7 +197,7 @@ void Wizard::MainWizard::setupGameSettings() return; } QTextStream stream(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); mGameSettings.readFile(stream); } @@ -233,7 +233,7 @@ void Wizard::MainWizard::setupLauncherSettings() return; } QTextStream stream(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); mLauncherSettings.readFile(stream); } @@ -460,7 +460,7 @@ void Wizard::MainWizard::writeSettings() } QTextStream stream(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); mGameSettings.writeFile(stream); file.close(); @@ -486,7 +486,7 @@ void Wizard::MainWizard::writeSettings() } stream.setDevice(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); mLauncherSettings.writeFile(stream); file.close(); diff --git a/components/CMakeLists.txt b/components/CMakeLists.txt index c1dbe36798..b68acfc152 100644 --- a/components/CMakeLists.txt +++ b/components/CMakeLists.txt @@ -197,7 +197,7 @@ add_component_dir (esm4 ) add_component_dir (misc - constants utf8stream resourcehelpers rng messageformatparser weakcache thread + constants utf8stream utf8qtextstream resourcehelpers rng messageformatparser weakcache thread compression osguservalues color tuplemeta tuplehelpers ) diff --git a/components/config/gamesettings.cpp b/components/config/gamesettings.cpp index 6577232382..c28edf1e93 100644 --- a/components/config/gamesettings.cpp +++ b/components/config/gamesettings.cpp @@ -3,10 +3,10 @@ #include #include -#include #include #include +#include const char Config::GameSettings::sArchiveKey[] = "fallback-archive"; const char Config::GameSettings::sContentKey[] = "content"; @@ -232,7 +232,7 @@ bool Config::GameSettings::isOrderedLine(const QString& line) bool Config::GameSettings::writeFileWithComments(QFile& file) { QTextStream stream(&file); - stream.setCodec(QTextCodec::codecForName("UTF-8")); + ensureUtf8Encoding(stream); // slurp std::vector fileCopy; diff --git a/components/misc/utf8qtextstream.hpp b/components/misc/utf8qtextstream.hpp new file mode 100644 index 0000000000..37ee2cfe89 --- /dev/null +++ b/components/misc/utf8qtextstream.hpp @@ -0,0 +1,20 @@ +#ifndef MISC_UTF8QTEXTSTREAM_HPP +#define MISC_UTF8QTEXTSTREAM_HPP + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +#include +#endif +#include + +namespace +{ + void ensureUtf8Encoding(QTextStream& stream) + { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + stream.setCodec(QTextCodec::codecForName("UTF-8")); +#else + stream.setEncoding(QStringConverter::Utf8); +#endif + } +} +#endif