-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

<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 に答える
1

You can use std::string::find and std::string::replace in a loop to do it:

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 に答える