Числа после обратной косой черты являются значениями последовательности байтов UTF-8 кириллических букв, каждый байт представлен в виде восьмеричного числа.
Например, вы можете использовать регулярное выражение для замены каждого \ooo
на его значение, чтобы получить реальную строку UTF-8:
Посмотреть на Wandbox
#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main()
{
std::string const source = R"(Invalid user \320\272\320\276\320\274\320\274\321\320\275\320\270\320\267\320\274 from 172.28.60.28 port 50712)";
boost::regex const re(R"(\\\d\d\d)");
auto const replacer = [](boost::smatch const& match, auto it) {
auto const byteVal = std::stoi(&match[0].str()[1], 0, 8);
*it = static_cast<char>(byteVal);
return ++it;
};
std::string const out = boost::regex_replace(source, re, replacer);
std::cout << out << std::endl;
return EXIT_SUCCESS;
}
Если вам действительно нужно, вы можете затем преобразовать это std::string
в std::wstring
, используя, например, Метод Томаса .