-2

我需要转换一个可以包含 \r\n 作为字符串一部分的输入字符串。例如如下所示

\r\n Content-type: text/plain; charset=iso-8859-1 \r\n Subject: Test Subject \r\n\r\n Test Message 

现在,在通过 HTTP Post 数据发送此字符串时,我需要将 \r\n 转换为百分位数编码。但是当我使用 curl_easy_escape 函数时,它会将 \r\n 理解为不同的字符并且编码不正确。因此,为避免此类错误,我需要将上面的字符串中的 \r\n 转换为回车符和换行符,以便通过 curl_easy_escape() 函数正确转换缓冲区。我尝试将 sstream 对象、sprintf 和 sscanf 与缓冲区一起使用(因为缓冲区是 std::string 对象),但没有太大帮助。基本上我想转换缓冲区如下

内容类型:文本/纯文本;charset=iso-8859-1 主题:测试主题

测试消息

因此,当我们将此缓冲区传递给 curl_easy_escape 时,它​​会正确编码。因此,这方面的任何指示都会非常有帮助。

4

2 回答 2

1

您可以在循环中使用std::string::findand来执行此操作:std::string::replace

std::string input = "\\r\\n Content-type: text/plain; charset=iso-8859-1 \\r\\n Subject: Test Subject \\r\\n\\r\\n Test Message";

std::string::size_type pos = 0;
while ((pos = input.find("\\r\\n", pos)) != std::string::npos)
{
    input.replace(pos, 4, "\r\n");
}
于 2012-10-30T09:04:31.773 回答
1

<regex>如果您有权访问成员,则可以使用成员:

std::string const input("abcd\\r\\nefgh\\r\\nijkl");
std::string const output(std::regex_replace(input, std::regex("\\\\r\\\\n"), std::string("\r\n")));
于 2012-10-30T09:40:52.960 回答