commit 938463b5d6bad29dfe71490a58d6724c4cd573f7
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Thu Jun 20 11:22:53 2019 +0200
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.
---
src/frontends/qt4/GuiLyXFiles.cpp | 2 +-
src/frontends/qt4/GuiWorkArea.cpp | 8 +++-----
src/support/lstrings.cpp | 9 ++++-----
3 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/src/frontends/qt4/GuiLyXFiles.cpp
b/src/frontends/qt4/GuiLyXFiles.cpp
index 98c4341..6a59e6e 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 001056d..7955731 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 84757b3..68eabd9 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();
}