delphi IdMultipartFormData post提交数据乱码和数据太长被截取问题。

kinghu123 2017-07-17 02:05:38
Delphi 模拟post 上传文件和提交数据,数据中有中文,提交数据就乱码变?试了好几个版本的Delphi 2010 xe xe2 xe3 xe7 中文都是乱码,在网上找了下,2010下,重新IdRead 方法,加上 tencoding,default可以解决中文问题,但是新的问题又来了,重写后,如果数据过多,会导致部分数据丢失,无法post全部数据。求大神指教,到底啥情况,这中文乱码太坑了。。。。,现在没分,还请大神帮忙
...全文
2118 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CIA0 2021-01-21
  • 打赏
  • 举报
回复
请问怎么解决 AddFormField加上ContentTransfer 可以, 但是 AddFile 怎么改,改请求参数不管用
kinghu123 2017-07-18
  • 打赏
  • 举报
回复
引用 4 楼 pathletboy 的回复:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  IdHTTP,
  IdMultipartFormData;

var
  http: TIdHTTP;
  data: TIdMultiPartFormDataStream;
begin
  http := TIdHTTP.Create(nil);
  data := TIdMultiPartFormDataStream.Create();
  try
    data.AddFormField('aa', '中文测试', 'utf-8');
    Writeln(http.Post('http://httpbin.org/post', data));
  finally
    data.Free;
    http.Free;
  end;
  Readln;
end.
中文问题解决了,谢谢,可以ms.AddFormField('sName', '哈啊哈', 'utf-8').ContentTransfer := '8bit'; 这样就不乱码了,但是我发现,如果上次图片,添加ms.AddFile 这样也还是会乱码的,很奇怪,是bug吗
kinghu123 2017-07-18
  • 打赏
  • 举报
回复
引用 4 楼 pathletboy 的回复:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  IdHTTP,
  IdMultipartFormData;

var
  http: TIdHTTP;
  data: TIdMultiPartFormDataStream;
begin
  http := TIdHTTP.Create(nil);
  data := TIdMultiPartFormDataStream.Create();
  try
    data.AddFormField('aa', '中文测试', 'utf-8');
    Writeln(http.Post('http://httpbin.org/post', data));
  finally
    data.Free;
    http.Free;
  end;
  Readln;
end.
[
引用 4 楼 pathletboy 的回复:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  IdHTTP,
  IdMultipartFormData;

var
  http: TIdHTTP;
  data: TIdMultiPartFormDataStream;
begin
  http := TIdHTTP.Create(nil);
  data := TIdMultiPartFormDataStream.Create();
  try
    data.AddFormField('aa', '中文测试', 'utf-8');
    Writeln(http.Post('http://httpbin.org/post', data));
  finally
    data.Free;
    http.Free;
  end;
  Readln;
end.
引用 4 楼 pathletboy 的回复:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  IdHTTP,
  IdMultipartFormData;

var
  http: TIdHTTP;
  data: TIdMultiPartFormDataStream;
begin
  http := TIdHTTP.Create(nil);
  data := TIdMultiPartFormDataStream.Create();
  try
    data.AddFormField('aa', '中文测试', 'utf-8');
    Writeln(http.Post('http://httpbin.org/post', data));
  finally
    data.Free;
    http.Free;
  end;
  Readln;
end.
code=delphi] procedure TForm4.Button2Click(Sender: TObject); var data: TIdMultiPartFormDataStream; stream:tstringstream; begin stream:=tstringstream.Create('',Tencoding.UTF8); data := TIdMultiPartFormDataStream.Create(); try data.AddFormField('aa', '中文测试', 'utf-8'); stream.LoadFromStream(data); stream.SaveToFile('aaa.txt'); finally data.Free; stream.Free; end; end;[/code] 我这样测试了,还是中文乱码,编码修改也一样的输出的内容是 ----------071817085830871 Content-Disposition: form-data; name="aa" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable =E4=B8=AD=E6=96=87=E6=B5=8B=E8=AF=95 ----------071817085830871--
kinghu123 2017-07-18
  • 打赏
  • 举报
回复
已经解决了,把编码修改为gb2312,http请求的编码也该为gb2312就行了
pathletboy 2017-07-17
  • 打赏
  • 举报
回复
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  IdHTTP,
  IdMultipartFormData;

var
  http: TIdHTTP;
  data: TIdMultiPartFormDataStream;
begin
  http := TIdHTTP.Create(nil);
  data := TIdMultiPartFormDataStream.Create();
  try
    data.AddFormField('aa', '中文测试', 'utf-8');
    Writeln(http.Post('http://httpbin.org/post', data));
  finally
    data.Free;
    http.Free;
  end;
  Readln;
end.
pathletboy 2017-07-17
  • 打赏
  • 举报
回复
引用 2 楼 kinghu123 的回复:
[quote=引用 1 楼 pathletboy 的回复:] 中文是utf8编码
我修改过编码,各种编码都试了个遍,还是乱的,搞不懂了,xe7 TIdMultiPartFormDataStream.IdRead 方法我没法重写,有两个函数没法引用到[/quote] 有测试环境么
kinghu123 2017-07-17
  • 打赏
  • 举报
回复
引用 1 楼 pathletboy 的回复:
中文是utf8编码
我修改过编码,各种编码都试了个遍,还是乱的,搞不懂了,xe7 TIdMultiPartFormDataStream.IdRead 方法我没法重写,有两个函数没法引用到
pathletboy 2017-07-17
  • 打赏
  • 举报
回复
中文是utf8编码

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧