diff --git a/src/tools/stringTools.cpp b/src/tools/stringTools.cpp index dcd5fc4ff..8e81d1cf1 100644 --- a/src/tools/stringTools.cpp +++ b/src/tools/stringTools.cpp @@ -241,7 +241,8 @@ std::string kiwix::urlEncode(const std::string& value, bool encodeReserved) if (!needsEscape(*it, encodeReserved)) { os << *it; } else { - os << '%' << std::setw(2) << static_cast(static_cast(*it)); + const unsigned int charVal = static_cast(*it); + os << '%' << std::setw(2) << std::setfill('0') << charVal; } } return os.str(); diff --git a/test/stringTools.cpp b/test/stringTools.cpp index b6965f8fb..252264412 100644 --- a/test/stringTools.cpp +++ b/test/stringTools.cpp @@ -141,8 +141,7 @@ TEST(stringTools, urlEncode) EXPECT_EQ(urlEncode(otherSymbols), "%60%23%25%5E%5B%5D%7B%7D%5C%7C%22%3C%3E"); EXPECT_EQ(urlEncode(otherSymbols), urlEncode(otherSymbols, true)); - // XXX: there is a bug with formatting of single-digit hex values - EXPECT_EQ(urlEncode(whitespace), "%20% A% 9% D"); + EXPECT_EQ(urlEncode(whitespace), "%20%0A%09%0D"); EXPECT_EQ(urlEncode(whitespace), urlEncode(whitespace, true)); EXPECT_EQ(urlEncode(someNonASCIIChars), "%CE%A3%E2%99%82%E2%99%80%E3%83%84");