我需要转换一个输入字符串,它可以包含\ 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对象),但没有多大帮助。基本上我想将缓冲区转换为如下
内容类型:text / plain;字符集= ISO-8859-1 主题:测试主题
测试消息
因此,当我们将此缓冲区传递给curl_easy_escape时,它会正确编码。 所以这方面的任何指示都会非常有用。
答案 0 :(得分:1)
您可以在循环中使用std::string::find
和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");
}
答案 1 :(得分:0)
如果您有权访问<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")));
成员:
{{1}}