gpt4 book ai didi

c++ - 如何在 C++ 中将 "\320\272\320\276\320\274..."之类的文本转换为 std::wstring?

转载 作者:行者123 更新时间:2023-11-30 02:19:08 26 4
gpt4 key购买 nike

我正在编写处理来自 Ubuntu 的消息的代码,其中一些消息包含,例如:

localhost sshd 1658 - - 来自 172.28 的无效用户\320\272\320\276\320\274\320\274\321\320\275\320\270\320\267\320\274。 60.28 端口 50712]

其中“\320\272\320\276\320\274\320\274\321\320\275\320\270\320\267\320\274”是最初为俄语的用户名。如何将其转换为 std::wstring?

最佳答案

反斜杠后面的数字是西里尔字母的UTF-8字节序列值,每个字节表示为一个八进制数。

例如,您可以使用正则表达式替换将每个 \ooo 替换为其值,以便您获得真正的 UTF-8 字符串:

See it on 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 使用例如Thomas的方法。

关于c++ - 如何在 C++ 中将 "\320\272\320\276\320\274..."之类的文本转换为 std::wstring?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51178033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com