我用2009的idhttp获取网页内容 网页内容是字母或数字没问题,获取中文乱码php网页上就输出2个汉字
<php?
echo '哈哈;
?>
我直接用get获取的
showmessage(idhttp.get('http://localhost/echo.php'));相同代码放到2007就可以正确显示汉字,请高手帮忙看看2009下如何能转换成可以看得懂的汉字?

解决方案 »

  1.   

    idhttp.Request.AcceptCharSet := 'UTF-8'; 设置一下再GET试下。
      

  2.   


    procedure TForm1.btn1Click(Sender: TObject); 
    var 
    str:string; 
    idhttp1:tidhttp; 
    retstr:string; 
    begin 
    idhttp1:=TIdHTTP.Create(nil); 
    try 
    idhttp1.Request.AcceptCharSet := 'UTF-8'; 
    ShowMessage(idhttp1.Get('http://localhost/index2.php') ); 
    idhttp1.Free; 
    except 
    idhttp1.Free; 
    end; 
    end; end. 
      

  3.   

    唉,家里没装2009,这样再试试
    var
      vStream: TMemoryStream;
    begin
      vStream:= TMemoryStream.Create;
      IdHTTP1.Get('http://localhost/echo.php', vStream);
      vStream.Position := 0;
      Memo1.Lines.LoadFromStream(vStream);
      vStream.Free;
    end;
    对了,你的网页是什么编码格式?
      

  4.   

    什么格式?我就用记事本写的php的
    <php? 
    echo '哈哈; 
    ?> 
    就这么点代码,我先试试你上边的方法,一会回来
      

  5.   

    上边方法可以了 呵呵,但是我想直接用字符串 (方便我showmessage),可以转换吗?
      

  6.   

    现在手头没有2009,
    你可以研究下这个: TEncoding
      

  7.   

    现在手头没有2009,
    你可以研究下这个: TEncoding
      

  8.   

    默认是按系统指定locale(CP_ACP)输出的,简体中文系统默认的是gb18030(虽然名义上是gb2312的代码页)。但是indy只对utf-8的编码进行了处理,所以其他编码只能自己想办法处理了,比如这样:var
      ss : TStringStream;
    begin
      ss := TStringStream.Create('', TEncoding.GetEncoding(936)); { 指定gb2312的中文代码页,或者54936(gb18030)更好些 }
      try
        IdHTTP1.Get(CSURL, ss);
        IdHTTP1.Get(CSURL);
        Memo1.Text := ss.DataString;
      finally
        ss.Free;
      end;
    end;
      

  9.   

    var
      ss : TStringStream;
    begin
      ss := TStringStream.Create('', TEncoding.UTF8);
      try
        IdHTTP1.Get(CSURL, ss);
        Memo1.Text := ss.DataString;
      finally
        ss.Free;
      end;
    end;