Intro
У меня есть некоторые данные, которые мне нужно преобразовать в правильные китайские иероглифы, но я думаю, что застрял на последнем преобразовании числа в строку. Я проверил, используя этот онлайн-инструмент для преобразования шестнадцатеричного текста в , что e6b9af
соответствует тексту 湯
.
MWE
Вот минимальный пример, который я сделалчтобы проиллюстрировать проблему. Входные данные "%e6%b9%af"
(получены из URL-адреса где-то еще).
#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;
}
Выходные данные
湯 and 15120815 are not the same
Ожидаемый вывод
湯 and 湯 are the same
Дополнительный вопрос
Все ли символы на иностранных языках представлены 3 байтами или это только для китайского языка? Поскольку моя попытка предполагает блоки по 3 байта, это хорошее предположение?