web-dev-qa-db-ja.com

idhttp indy post、utf-8でリクエスト(パラメータ)を実行

Utf-8でリクエストを投稿しようとしていますが、サーバーはAsciiでリクエストを取得しています。

投稿のTstringList形式を試しました。

ストリーム形式を試しました

TStringStreamにUTF8エンコーディングを強制しようとしました。

インディをxe5インディに更新しようとしました

コードの例を次に示します。

var
  server:TIdHttp;
  Parameters,response:TStringStream;
begin
  response := TStringStream.Create;
  Parameters := TStringSTream.create(UTF8String('param1=Value1&param2=عربي/عرب&param3=Value3'),TEncoding.UTF8);
  Server.Post(TIdURI.URLEncode('http://www.example.com/page.php'),Parameters,response);
end;

現在、アラブのコーディングはネットワークスニファでASCIIとして渡されます。

0060 d8 b9 d8 b1 d8 a8 d9 8a 2f d8 b9 d8 b1 d8 a8 26 ......../......&

Indy Http idにAsciiではなくUtf-8でリクエストパラメータを渡すように強制するにはどうすればよいですか?

6
none

D2009 +のTStringStreamUnicodeStringを使用し、TEncodingを認識しているため、手動で_UTF8String_を作成しないでください。

_var
  server: TIdHttp;
  Parameters,response: TStringStream;
begin
  response := TStringStream.Create;
  Parameters := TStringStream.Create('param1=Value1&param2=عربي/عرب&param3=Value3', TEncoding.UTF8);
  Server.Post('http://www.example.com/page.php',Parameters,response);
end;
_

または、TStringsバージョンもデフォルトでUTF-8にエンコードされます。

_var
  server: TIdHttp;
  Parameters: TStringList;
  Response: TStringStream;
begin
  response := TStringStream.Create;
  Parameters := TStringList.Create;
  Parameters.Add('param1=Value1');
  Parameters.Add('param2=عربي/عرب');
  Parameters.Add('param3=Value3');
  Server.Post('http://www.example.com/page.php',Parameters,response);
end;
_

いずれにせよ、Post()を呼び出す前にリクエスト文字セットを設定して、サーバーがUTF-8でエンコードされたデータを送信していることを認識できるようにする必要があります。

_Server.Request.ContentType := 'application/x-www-form-urlencoded';
Server.Request.Charset := 'utf-8';
_
14
Remy Lebeau