From: Jean-Marc Lasgouttes Date: Thu, 20 Jun 2019 09:22:53 +0000 (+0200) Subject: Fixup 3dc54d4a: fix string encoding issues with Qt4 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=25e0b58c24551aba32b722823abaca5fa64f0491;p=features.git Fixup 3dc54d4a: fix string encoding issues with Qt4 The culprit here is the constructor QString(QByteArray const &): in Qt4, it would interpret the byte array as latin1, and in Qt5 as utf8. Therefore it is safer to use explicitly QString::fromUtf8 instead of this constructor. Several places where additionally simplified, in order to avoid some extra conversions. --- diff --git a/src/frontends/qt4/GuiLyXFiles.cpp b/src/frontends/qt4/GuiLyXFiles.cpp index 98c43419fd..6a59e6eea3 100644 --- a/src/frontends/qt4/GuiLyXFiles.cpp +++ b/src/frontends/qt4/GuiLyXFiles.cpp @@ -43,7 +43,7 @@ namespace { QString const guiString(QString in) { // recode specially encoded chars in file names (URL encoding and underbar) - return QString(QByteArray::fromPercentEncoding(in.toUtf8())).replace('_', ' '); + return QString::fromUtf8(QByteArray::fromPercentEncoding(in.toUtf8())).replace('_', ' '); } } // namespace anon diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp index 001056df72..7955731ad3 100644 --- a/src/frontends/qt4/GuiWorkArea.cpp +++ b/src/frontends/qt4/GuiWorkArea.cpp @@ -1872,11 +1872,9 @@ public: : tab_(tab) { // Recode URL encoded chars via fromPercentEncoding() - filename_ = (filename.extension() == "lyx") ? - QString(QByteArray::fromPercentEncoding( - toqstr(filename.onlyFileNameWithoutExt()).toUtf8())) - : QString(QByteArray::fromPercentEncoding( - toqstr(filename.onlyFileName()).toUtf8())); + string const fn = (filename.extension() == "lyx") + ? filename.onlyFileNameWithoutExt() : filename.onlyFileName(); + filename_ = QString::fromUtf8(QByteArray::fromPercentEncoding(fn.c_str())); postfix_ = toqstr(filename.absoluteFilePath()). split("/", QString::SkipEmptyParts); postfix_.pop_back(); diff --git a/src/support/lstrings.cpp b/src/support/lstrings.cpp index 84757b3085..68eabd9d26 100644 --- a/src/support/lstrings.cpp +++ b/src/support/lstrings.cpp @@ -1453,16 +1453,15 @@ std::string formatFPNumber(double x) docstring to_percent_encoding(docstring const & in, docstring const & ex) { - QByteArray input = toqstr(in).toUtf8(); - QByteArray excludes = toqstr(ex).toUtf8(); - return qstring_to_ucs4(QString(input.toPercentEncoding(excludes))); + QByteArray input = to_utf8(in).c_str(); + QByteArray excludes = to_utf8(ex).c_str(); + return from_utf8(string(input.toPercentEncoding(excludes).data())); } string from_percent_encoding(string const & in) { - QByteArray input = toqstr(in).toUtf8(); - return fromqstr(QString(QByteArray::fromPercentEncoding(input))); + return QByteArray::fromPercentEncoding(in.c_str()).data(); }