From cf71437d79004775f0e7602f0578e968fb6b1728 Mon Sep 17 00:00:00 2001 From: Alejandro Martinez Date: Fri, 12 Jan 2024 11:28:30 -0300 Subject: [PATCH] Qt6: utf8 for QTextStream is the default Fixes #3953 --- src/Charts/GoldenCheetah.cpp | 6 ++++++ src/Charts/LTMChartParser.cpp | 4 ++++ src/Charts/LTMWindow.cpp | 2 ++ src/Charts/UserChart.cpp | 2 ++ src/Core/APIWebService.cpp | 2 ++ src/Core/GcUpgrade.cpp | 2 ++ src/Core/Measures.cpp | 2 ++ src/Core/NamedSearch.cpp | 2 ++ src/Core/RideCache.cpp | 2 ++ src/Core/RideDB.y | 6 ++++++ src/Core/SeasonParser.cpp | 2 ++ src/FileIO/FitlogRideFile.cpp | 2 ++ src/FileIO/GcRideFile.cpp | 2 ++ src/FileIO/GpxRideFile.cpp | 2 ++ src/FileIO/JsonRideFile.y | 8 ++++++++ src/FileIO/PolarRideFile.cpp | 12 ++++++++++++ src/FileIO/PwxRideFile.cpp | 2 ++ src/FileIO/RideAutoImportConfig.cpp | 2 ++ src/FileIO/Snippets.cpp | 2 ++ src/FileIO/TcxRideFile.cpp | 2 ++ src/Gui/AbstractView.cpp | 2 ++ src/Gui/GcCrashDialog.cpp | 2 ++ src/Gui/Perspective.cpp | 2 ++ src/Metrics/HrZones.cpp | 4 ++++ src/Metrics/PaceZones.cpp | 4 ++++ src/Metrics/RideMetadata.cpp | 2 ++ src/Metrics/UserMetricParser.cpp | 2 ++ src/Metrics/Zones.cpp | 4 ++++ src/Train/ErgFile.cpp | 6 ++++++ src/Train/LibraryParser.cpp | 2 ++ 30 files changed, 96 insertions(+) diff --git a/src/Charts/GoldenCheetah.cpp b/src/Charts/GoldenCheetah.cpp index 13d3a8780..c9eba95b8 100644 --- a/src/Charts/GoldenCheetah.cpp +++ b/src/Charts/GoldenCheetah.cpp @@ -935,7 +935,9 @@ GcChartWindow::saveChart() // lets go to it QTextStream out(&outfile); +#if QT_VERSION < 0x060000 out.setCodec ("UTF-8"); +#endif serializeChartToQTextStream(out); @@ -999,7 +1001,9 @@ GcChartWindow::chartPropertiesFromFile(QString filename) // read in the whole thing QTextStream in(&file); // GC .JSON is stored in UTF-8 with BOM(Byte order mark) for identification +#if QT_VERSION < 0x060000 in.setCodec ("UTF-8"); +#endif contents = in.readAll(); file.close(); } @@ -1082,7 +1086,9 @@ GcChartWindow::exportChartToCloudDB() chart.Header.GcVersion = QString::number(version); // get the gchart - definition json QTextStream out(&chart.ChartDef); +#if QT_VERSION < 0x060000 out.setCodec ("UTF-8"); +#endif serializeChartToQTextStream(out); out.flush(); // get Type and View from properties diff --git a/src/Charts/LTMChartParser.cpp b/src/Charts/LTMChartParser.cpp index 4a9c062d8..068acfe5b 100644 --- a/src/Charts/LTMChartParser.cpp +++ b/src/Charts/LTMChartParser.cpp @@ -96,7 +96,9 @@ LTMChartParser::serialize(QString filename, QList charts) }; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif serializeToQTextStream(out, charts); @@ -108,7 +110,9 @@ void LTMChartParser::serializeToQString(QString* string, QList charts) { QTextStream out(string); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif serializeToQTextStream(out, charts); diff --git a/src/Charts/LTMWindow.cpp b/src/Charts/LTMWindow.cpp index 0a453f9e2..c092875f5 100644 --- a/src/Charts/LTMWindow.cpp +++ b/src/Charts/LTMWindow.cpp @@ -1667,7 +1667,9 @@ LTMWindow::exportData() // open stream and write header QTextStream stream(&f); +#if QT_VERSION < 0x060000 stream.setCodec("UTF-8"); // Names and Units can be translated +#endif stream << content; // and we're done diff --git a/src/Charts/UserChart.cpp b/src/Charts/UserChart.cpp index aaf3cdfec..77903e5ac 100644 --- a/src/Charts/UserChart.cpp +++ b/src/Charts/UserChart.cpp @@ -566,7 +566,9 @@ UserChart::settings() const QString returning; QTextStream out(&returning); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif out << "{ "; // chartinfo diff --git a/src/Core/APIWebService.cpp b/src/Core/APIWebService.cpp index 034189382..bfddad90e 100644 --- a/src/Core/APIWebService.cpp +++ b/src/Core/APIWebService.cpp @@ -395,7 +395,9 @@ APIWebService::listActivity(QString athlete, QStringList paths, HttpRequest &req // read in the whole thing out.open(QFile::ReadOnly | QFile::Text); QTextStream in(&out); +#if QT_VERSION < 0x060000 in.setCodec ("UTF-8"); +#endif contents = in.readAll(); out.close(); diff --git a/src/Core/GcUpgrade.cpp b/src/Core/GcUpgrade.cpp index 1572d8bd8..fb8ae6aca 100644 --- a/src/Core/GcUpgrade.cpp +++ b/src/Core/GcUpgrade.cpp @@ -1052,7 +1052,9 @@ GcUpgradeLogDialog::saveAs() QFile file(fileName); file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif if (file.open(QIODevice::WriteOnly)) { diff --git a/src/Core/Measures.cpp b/src/Core/Measures.cpp index 88f571335..da2b6c0c8 100644 --- a/src/Core/Measures.cpp +++ b/src/Core/Measures.cpp @@ -164,7 +164,9 @@ MeasuresGroup::serialize(QString filename, QList &data) }; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif Measure *m = NULL; QJsonArray measures; diff --git a/src/Core/NamedSearch.cpp b/src/Core/NamedSearch.cpp index 0496b759b..6bede1b4c 100644 --- a/src/Core/NamedSearch.cpp +++ b/src/Core/NamedSearch.cpp @@ -198,7 +198,9 @@ NamedSearchParser::serialize(QString filename, QListNamedSearches) }; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // begin document out << "\n"; diff --git a/src/Core/RideCache.cpp b/src/Core/RideCache.cpp index 65050cfe7..1eb2d2954 100644 --- a/src/Core/RideCache.cpp +++ b/src/Core/RideCache.cpp @@ -462,7 +462,9 @@ RideCache::writeAsCSV(QString filename) }; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); // Metric names can be translated +#endif // write headings out<<"date, time, filename"; diff --git a/src/Core/RideDB.y b/src/Core/RideDB.y index dd73e7ec7..8a8cfc016 100644 --- a/src/Core/RideDB.y +++ b/src/Core/RideDB.y @@ -336,7 +336,9 @@ RideCache::load() // ok, lets read it in QTextStream stream(&rideDB); +#if QT_VERSION < 0x060000 stream.setCodec("UTF-8"); +#endif // Read the entire file into a QString -- we avoid using fopen since it // doesn't handle foreign characters well. Instead we use QFile and parse @@ -497,7 +499,9 @@ void RideCache::save(bool opendata, QString filename) // ok, lets write out the cache QTextStream stream(&rideDB); +#if QT_VERSION < 0x060000 stream.setCodec("UTF-8"); +#endif // no BOM needed for opendata as it doesn't contain textual data if (!opendata) stream.setGenerateByteOrderMark(true); @@ -996,7 +1000,9 @@ APIWebService::listRides(QString athlete, HttpRequest &request, HttpResponse &re // ok, lets read it in QTextStream stream(&rideDB); +#if QT_VERSION < 0x060000 stream.setCodec("UTF-8"); +#endif // Read the entire file into a QString -- we avoid using fopen since it // doesn't handle foreign characters well. Instead we use QFile and parse diff --git a/src/Core/SeasonParser.cpp b/src/Core/SeasonParser.cpp index 6cf3f0a37..52fb92e5b 100644 --- a/src/Core/SeasonParser.cpp +++ b/src/Core/SeasonParser.cpp @@ -182,7 +182,9 @@ SeasonParser::serialize(QString filename, QListSeasons) }; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // begin document out << "\n"; diff --git a/src/FileIO/FitlogRideFile.cpp b/src/FileIO/FitlogRideFile.cpp index b9bbf5d1e..0718d9caa 100644 --- a/src/FileIO/FitlogRideFile.cpp +++ b/src/FileIO/FitlogRideFile.cpp @@ -239,7 +239,9 @@ FitlogFileReader::writeRideFile(Context *context, const RideFile *ride, QFile &f if (!file.open(QIODevice::WriteOnly)) return(false); file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif out.setGenerateByteOrderMark(true); out << xml; out.flush(); diff --git a/src/FileIO/GcRideFile.cpp b/src/FileIO/GcRideFile.cpp index dc9c185ff..5abf105a4 100644 --- a/src/FileIO/GcRideFile.cpp +++ b/src/FileIO/GcRideFile.cpp @@ -275,7 +275,9 @@ GcFileReader::writeRideFile(Context *,const RideFile *ride, QFile &file) const return false; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif out.setGenerateByteOrderMark(true); out << xml; out.flush(); diff --git a/src/FileIO/GpxRideFile.cpp b/src/FileIO/GpxRideFile.cpp index 82ecd7891..b1f145996 100644 --- a/src/FileIO/GpxRideFile.cpp +++ b/src/FileIO/GpxRideFile.cpp @@ -178,7 +178,9 @@ GpxFileReader::writeRideFile(Context *context, const RideFile *ride, QFile &file if (!file.open(QIODevice::WriteOnly)) return(false); file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif //out.setGenerateByteOrderMark(true); out << xml; out.flush(); diff --git a/src/FileIO/JsonRideFile.y b/src/FileIO/JsonRideFile.y index f2242f078..68ca13a69 100644 --- a/src/FileIO/JsonRideFile.y +++ b/src/FileIO/JsonRideFile.y @@ -408,7 +408,9 @@ JsonFileReader::openRideFile(QFile &file, QStringList &errors, QList* // read in the whole thing QTextStream in(&file); // GC .JSON is stored in UTF-8 with BOM(Byte order mark) for identification +#if QT_VERSION < 0x060000 in.setCodec ("UTF-8"); +#endif contents = in.readAll(); file.close(); @@ -417,7 +419,11 @@ JsonFileReader::openRideFile(QFile &file, QStringList &errors, QList* if (contents.contains(QChar::ReplacementCharacter)) { if (file.exists() && file.open(QFile::ReadOnly | QFile::Text)) { QTextStream in(&file); +#if QT_VERSION < 0x060000 in.setCodec ("ISO 8859-1"); +#else + in.setCodec (QStringConverter::Latin1); +#endif contents = in.readAll(); file.close(); } @@ -798,7 +804,9 @@ JsonFileReader::writeRideFile(Context *context, const RideFile *ride, QFile &fil // setup streamer QTextStream out(&file); // unified codepage and BOM for identification on all platforms +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif out.setGenerateByteOrderMark(true); out << xml; diff --git a/src/FileIO/PolarRideFile.cpp b/src/FileIO/PolarRideFile.cpp index c95f485e9..765aaae5f 100644 --- a/src/FileIO/PolarRideFile.cpp +++ b/src/FileIO/PolarRideFile.cpp @@ -45,7 +45,9 @@ bool ScanPddFile(QFile &file, QString &hrmFile, QString &hrvFile, QString &gpxFi // from a QString QString contents; QTextStream in(&file); +#if QT_VERSION < 0x060000 in.setCodec("UTF-8"); +#endif contents = in.readAll(); file.close(); // check if the text string contains the replacement character for UTF-8 encoding @@ -59,7 +61,11 @@ bool ScanPddFile(QFile &file, QString &hrmFile, QString &hrvFile, QString &gpxFi file.open(QFile::ReadOnly); QTextStream is(&file); if (useISO8859) +#if QT_VERSION < 0x060000 is.setCodec ("ISO 8859-1"); +#else + is.setCodec (QStringConverter::Latin1); +#endif while (!is.atEnd()) { // the readLine() method doesn't handle old Macintosh CR line @@ -189,7 +195,9 @@ void HrmRideFile(RideFile *rideFile, RideFile*gpxresult, bool haveGPX, XDataSeri // from a QString QString contents; QTextStream in(&file); +#if QT_VERSION < 0x060000 in.setCodec("UTF-8"); +#endif contents = in.readAll(); file.close(); // check if the text string contains the replacement character for UTF-8 encoding @@ -204,7 +212,11 @@ void HrmRideFile(RideFile *rideFile, RideFile*gpxresult, bool haveGPX, XDataSeri file.open(QFile::ReadOnly); QTextStream is(&file); if (useISO8859) +#if QT_VERSION < 0x060000 is.setCodec ("ISO 8859-1"); +#else + is.setCodec (QStringConverter::Latin1); +#endif QString section = NULL; if (haveGPX) diff --git a/src/FileIO/PwxRideFile.cpp b/src/FileIO/PwxRideFile.cpp index 4e4ace2eb..697f50d6d 100644 --- a/src/FileIO/PwxRideFile.cpp +++ b/src/FileIO/PwxRideFile.cpp @@ -985,7 +985,9 @@ PwxFileReader::writeRideFile(Context *context, const RideFile *ride, QFile &file if (!file.open(QIODevice::WriteOnly)) return(false); file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif out.setGenerateByteOrderMark(true); out << xml; out.flush(); diff --git a/src/FileIO/RideAutoImportConfig.cpp b/src/FileIO/RideAutoImportConfig.cpp index b88aa6a20..5cbef2bbc 100644 --- a/src/FileIO/RideAutoImportConfig.cpp +++ b/src/FileIO/RideAutoImportConfig.cpp @@ -161,7 +161,9 @@ RideAutoImportConfigParser::serialize(QString filename, QList\n"; diff --git a/src/FileIO/Snippets.cpp b/src/FileIO/Snippets.cpp index 871cf4c43..814a65c48 100644 --- a/src/FileIO/Snippets.cpp +++ b/src/FileIO/Snippets.cpp @@ -124,7 +124,9 @@ Snippets::postProcess(RideFile *ride, DataProcessorConfig *config=0, QString op= // setup streamer QTextStream out(&outfile); // unified codepage and BOM for identification on all platforms +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif //out.setGenerateByteOrderMark(true); << make it easier to parse with no BOM out << "{\n\t\"" << op << "\": {\n"; diff --git a/src/FileIO/TcxRideFile.cpp b/src/FileIO/TcxRideFile.cpp index 912587d9d..711b84cdd 100644 --- a/src/FileIO/TcxRideFile.cpp +++ b/src/FileIO/TcxRideFile.cpp @@ -480,7 +480,9 @@ TcxFileReader::writeRideFile(Context *context, const RideFile *ride, QFile &file if (!file.open(QIODevice::WriteOnly)) return(false); file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif out.setGenerateByteOrderMark(true); out << xml; out.flush(); diff --git a/src/Gui/AbstractView.cpp b/src/Gui/AbstractView.cpp index c2a2ec8d8..b163842fe 100644 --- a/src/Gui/AbstractView.cpp +++ b/src/Gui/AbstractView.cpp @@ -290,7 +290,9 @@ AbstractView::saveState() }; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // is just a collection of layout (aka old HomeWindow name-layout.xml) out<<"\n"; diff --git a/src/Gui/GcCrashDialog.cpp b/src/Gui/GcCrashDialog.cpp index d416545ea..746c1ca8d 100644 --- a/src/Gui/GcCrashDialog.cpp +++ b/src/Gui/GcCrashDialog.cpp @@ -476,7 +476,9 @@ GcCrashDialog::saveAs() QFile file(fileName); file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif if (file.open(QIODevice::WriteOnly)) { // write the texts diff --git a/src/Gui/Perspective.cpp b/src/Gui/Perspective.cpp index 88c03a18b..5080d2053 100644 --- a/src/Gui/Perspective.cpp +++ b/src/Gui/Perspective.cpp @@ -1595,7 +1595,9 @@ Perspective::toFile(QString filename) // truncate and use 8bit encoding file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // write to output stream toXml(out); diff --git a/src/Metrics/HrZones.cpp b/src/Metrics/HrZones.cpp index 16497e494..5d87d1438 100644 --- a/src/Metrics/HrZones.cpp +++ b/src/Metrics/HrZones.cpp @@ -113,7 +113,9 @@ bool HrZones::read(QFile &file) return false; } QTextStream fileStream(&file); +#if QT_VERSION < 0x060000 fileStream.setCodec("UTF-8"); +#endif QRegExp commentrx("\\s*#.*$"); QRegExp blankrx("^[ \t]*$"); @@ -730,7 +732,9 @@ void HrZones::write(QDir home) if (file.open(QFile::WriteOnly)) { QTextStream stream(&file); +#if QT_VERSION < 0x060000 stream.setCodec("UTF-8"); +#endif stream << strzones; file.close(); } else { diff --git a/src/Metrics/PaceZones.cpp b/src/Metrics/PaceZones.cpp index 39ea11d7d..30d3c749c 100644 --- a/src/Metrics/PaceZones.cpp +++ b/src/Metrics/PaceZones.cpp @@ -145,7 +145,9 @@ bool PaceZones::read(QFile &file) return false; } QTextStream fileStream(&file); +#if QT_VERSION < 0x060000 fileStream.setCodec("UTF-8"); +#endif QRegExp commentrx("\\s*#.*$"); QRegExp blankrx("^[ \t]*$"); @@ -849,7 +851,9 @@ void PaceZones::write(QDir home) QFile file(home.canonicalPath() + "/" + fileName_); if (file.open(QFile::WriteOnly)) { QTextStream stream(&file); +#if QT_VERSION < 0x060000 stream.setCodec("UTF-8"); +#endif stream << strzones; file.close(); } else { diff --git a/src/Metrics/RideMetadata.cpp b/src/Metrics/RideMetadata.cpp index 49218da71..7e2d33a16 100644 --- a/src/Metrics/RideMetadata.cpp +++ b/src/Metrics/RideMetadata.cpp @@ -1677,7 +1677,9 @@ RideMetadata::serialize(QString filename, QListkeywordDefinit }; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // begin document out << "\n"; diff --git a/src/Metrics/UserMetricParser.cpp b/src/Metrics/UserMetricParser.cpp index 2c05ca859..bc5a5f728 100644 --- a/src/Metrics/UserMetricParser.cpp +++ b/src/Metrics/UserMetricParser.cpp @@ -119,7 +119,9 @@ UserMetricParser::serialize(QString filename, QList metrics) void UserMetricParser::serializeToQTextStream(QTextStream& out, QList metrics) { +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // begin document out << QString("\n").arg(USER_METRICS_VERSION_NUMBER); diff --git a/src/Metrics/Zones.cpp b/src/Metrics/Zones.cpp index 610611611..0d109c910 100644 --- a/src/Metrics/Zones.cpp +++ b/src/Metrics/Zones.cpp @@ -105,7 +105,9 @@ bool Zones::read(QFile &file) return false; } QTextStream fileStream(&file); +#if QT_VERSION < 0x060000 fileStream.setCodec("UTF-8"); +#endif QRegExp commentrx("\\s*#.*$"); QRegExp blankrx("^[ \t]*$"); @@ -892,7 +894,9 @@ void Zones::write(QDir home) if (file.open(QFile::WriteOnly)) { QTextStream stream(&file); +#if QT_VERSION < 0x060000 stream.setCodec("UTF-8"); +#endif stream << strzones; file.close(); } else { diff --git a/src/Train/ErgFile.cpp b/src/Train/ErgFile.cpp index f15f522d0..f7b0a5dfd 100644 --- a/src/Train/ErgFile.cpp +++ b/src/Train/ErgFile.cpp @@ -1215,7 +1215,9 @@ ErgFile::save(QStringList &errors) // setup output stream to file QTextStream out(&f); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // write the header // @@ -1325,7 +1327,9 @@ ErgFile::save(QStringList &errors) // setup output stream to file QTextStream out(&f); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // write the header // @@ -1430,7 +1434,9 @@ ErgFile::save(QStringList &errors) // setup output stream to file QTextStream out(&f); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif out << "\n"; diff --git a/src/Train/LibraryParser.cpp b/src/Train/LibraryParser.cpp index ce47a8c14..c97c0f1d2 100644 --- a/src/Train/LibraryParser.cpp +++ b/src/Train/LibraryParser.cpp @@ -83,7 +83,9 @@ LibraryParser::serialize(QDir home) }; file.resize(0); QTextStream out(&file); +#if QT_VERSION < 0x060000 out.setCodec("UTF-8"); +#endif // write out to file