Intro
I have some input that I need to convert to the correct Chinese characters but I think I'm stuck at the final number to string conversion. I have checked using this hex to text converter online tool that e6b9af corresponds to the text 湯.
MWE
Here is a minimal example that I made to illustrate the problem. The input is "%e6%b9%af" (obtained from an URL somewhere else).
#include <iostream>
#include <string>
std::string attempt(std::string path)
{
  std::size_t i = path.find("%");
  while (i != std::string::npos)
  {
    std::string sub = path.substr(i, 9);
    sub.erase(i + 6, 1);
    sub.erase(i + 3, 1);
    sub.erase(i, 1);
    std::size_t s = std::stoul(sub, nullptr, 16);
    path.replace(i, 9, std::to_string(s));
    i = path.find("%");
  }
  return path;
}
int main()
{
  std::string input = "%E6%B9%AF";
  std::string goal = "湯";
  // convert input to goal
  input = attempt(input);
  
  std::cout << goal << " and " << input << (input == goal ? " are the same" : " are not the same") << std::endl;
  return 0;
}
Output
湯 and 15120815 are not the same
Expected output
湯 and 湯 are the same
Additional question
Are all characters in foreign languages represented in 3 bytes or is that just for Chinese? Since my attempt assumes blocks of 3 bytes, is that a good assumption?
 
    