c ++将输入字符串中的\ r \ n转换为回车符和换行符

时间:2012-10-30 08:50:33

标签: c++ string printf scanf

我需要转换一个输入字符串,它可以包含\ 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时,它会正确编码。 所以这方面的任何指示都会非常有用。

2 个答案:

答案 0 :(得分:1)

您可以在循环中使用std::string::findstd::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}}