2012-10-30 1077 views
-2

我需要將可包含\ r \ n的輸入字符串轉換爲字符串的一部分。例如下面C++將輸入字符串中的 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它正確編碼。 所以在這方面的任何指針都會非常有幫助。

+3

什麼結果,你期待什麼呢? 「curl_easy_escape函數理解爲\ r \ n爲不同的字符」 - 它們**是**不同的字符。 –

+0

@Kiril基本上我想把緩衝區轉換成如下 Content-type:text/plain; charset = iso-8859-1 主題:測試主題 測試消息 因此,curl_easy_escape可以正確編碼。輸出缺少新行和回車符。 – Abhinav

+0

您將任何*轉換爲編碼百分比的方式是將每個*字符轉換並轉換。 '\ r \ n'是*兩個*字符,所以要轉換它們,你完全按照curl所做的:轉換一個字符,然後轉換另一個字符。如果你想要別的東西,那麼請向我們展示*正確*在編碼之後應該看起來像什麼\ r \ n'。 – jalf

回答

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"); 
} 
+0

感謝它的幫助和編碼現在是正確的。 – Abhinav

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")));