一个网站的post包参数是这样的-----------------------------7d82ce3a290528
Content-Disposition: form-data; name="Title"你好
-----------------------------7d82ce3a290528
Content-Disposition: form-data; name="ID"1932
-----------------------------7d82ce3a290528
Content-Disposition: form-data; name="Content"连接成功
-----------------------------7d82ce3a290528--可是利用IDhttp上传的时候字段的值如果是中文,就会显示???????,如果是英文或者数字就没关系不知道是哪里的事我使用的是Delphi2010,请哪位朋友帮忙看一下,是哪里的问题

解决方案 »

  1.   

    unit UpDownFile;interfaceuses
    Windows, Classes, Idhttp, URLMon, IdMultipartFormData;const UpUrl = 'http://127.0.0.1/upfile/upfile.asp';
    const UpFileName = 'C:\Documents and Settings\Administrator\桌面\test\web.mdb';
    const DownUrl = 'http://www.google.com/images/logo_sm.gif';
    const DownFileName = 'web.gif';type
    TUpDownFile = class
    private
    FThreadID : DWord;
    FHandle : THandle;
    { Private declarations }
    public
    constructor Create;
    procedure UpFile;
    procedure DownFile;
    procedure Close;
    end;implementationfunction UpFileEx(): string; stdcall;
    var
    MutPartForm: TIdMultiPartFormDataStream;
    response: string;
    FHttp: Tidhttp;
    begin
    FHttp := Tidhttp.Create(nil);
    FHttp.HandleRedirects := true;
    FHttp.AllowCookies := true;MutPartForm := TIdMultiPartFormDataStream.Create;
    MutPartForm.AddFormField('act', 'upload');
    MutPartForm.AddFormField('upcount', '1');
    MutPartForm.AddFormField('filepath', 'data');
    MutPartForm.AddFormField('file1', 'filename="' + UpFileName + '"');
    MutPartForm.AddFormField('Submit', 'Submit');
    MutPartForm.AddFile('file1', UpFileName, 'text/plain');
    try
    response := FHttp.Post(UpUrl, MutPartForm);
    //Messagebox(0, PAnsiChar(response), 'ca', MB_OK);
    finally
    MutPartForm.Free;
    FHttp.Free;
    end;
    end;function DownFileEx(): string; stdcall;
    begin
    UrlDownloadToFile(nil, PChar(DownUrl), PChar(DownFileName), 0, nil);
    end;constructor TUpDownFile.Create;
    begin
    //
    end;procedure TUpDownFile.UpFile;
    begin
    //FHandle := CreateThread(nil,0,@UpFileEx,nil,0,FThreadID);
    UpFileEx;
    end;procedure TUpDownFile.DownFile;
    begin
    // FHandle := CreateThread(nil,0,@DownFileEx,nil,0,FThreadID);
    DownFileEx;
    end;procedure TUpDownFile.Close;
    begin
    //ExitThread(FThreadID);
    end;end.
      

  2.   

    看一下IdHttp的编码,改到对应的编码就可以啦,sIdHTTP.Request,另外内容也要做对应的转码,
      

  3.   

    DELPHI 2010是Unicode,你把文本改为ANSI试试。
      

  4.   


    怎么改变文本呢!我把代码附上,帮我修改一下吧,谢谢了!下边的"标题"和"为什么"显示的是"????????"英文和数字显示正常!
    procedure TForm1.Button1Click(Sender: TObject);
    var
      str:string;
      xxx:TStringStream;
      Multi:TIdMultiPartFormDataStream;
    begin
      xxx:=TStringStream.Create;
      Multi :=TIdMultiPartFormDataStream.Create;
      Multi.AddFormField('FIELD_Title','标题');
      Multi.AddFormField('FIELD_Q_SubjectID','14');
      Multi.AddFormField('FIELD_Q_Type','1');
      Multi.AddFormField('FIELD_Content','为什么123456ABCDE');
      Multi.Position := 0;
      xxx.LoadFromStream(Multi);
      xxx.SaveToFile('1.txt');
      Multi.Free;
      xxx.Free;
    end;
      

  5.   

    AnsiString('标题')这样行不,没用过2010,如果行的话,那就是编码的问题啦
      

  6.   

    TIdMultiPartFormDataStream 里重载IDRead 
    修改AppendString函数的调用参数 
    加入最后一个参数TEncoding.Default
      

  7.   

    strTitle: AnsiString;
    strTitle := '标题';
    Multi.AddFormField('FIELD_Title',strTitle);
    然后试试,
    如果不行,试试把网页制定为UTF-16的编码试试。