Utf-8でリクエストを投稿しようとしていますが、サーバーはAsciiでリクエストを取得しています。
投稿のTstringList形式を試しました。
ストリーム形式を試しました
TStringStreamにUTF8エンコーディングを強制しようとしました。
インディをxe5インディに更新しようとしました
コードの例を次に示します。
var
server:TIdHttp;
Parameters,response:TStringStream;
begin
response := TStringStream.Create;
Parameters := TStringSTream.create(UTF8String('param1=Value1¶m2=عربي/عرب¶m3=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でリクエストパラメータを渡すように強制するにはどうすればよいですか?
D2009 +のTStringStream
はUnicodeString
を使用し、TEncoding
を認識しているため、手動で_UTF8String
_を作成しないでください。
_var
server: TIdHttp;
Parameters,response: TStringStream;
begin
response := TStringStream.Create;
Parameters := TStringStream.Create('param1=Value1¶m2=عربي/عرب¶m3=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';
_