Delphi XE2 中的Indy10中的关于Response中文乱码问题

小弟最近在写一用Indy写的webservice中间层代码发现了Reponse的内空中如果有中文,客户端显示是乱码

原来的代码片断如下:

procedure THisWebBase.DealEaiServerAction(Sender: TObject; Request: TWebRequest;
  Response: TWebResponse; var Handled: Boolean);
var
  LXmlIn, LXmlOut: string;
  LEaiServer: THisEaiHttpServer;
begin
  if (Request.Method = 'POST') or (Request.Method = 'PUT')then
  begin
    LXmlIn  := '';
    Request.ContentEncoding;
    LXmlIn  := Request.Content;
    LXmlIn  := HTTPDecode(LXmlIn);


    CoInitialize(nil);
    LEaiServer  := THisEaiHttpServer.Create(Request.RemoteAddr);
    if FLocalPort = 0 then
      FLocalPort  := Request.ServerPort;
    try
      FServerValid  := True;
      try
        LXmlOut := LEaiServer.GetData(LXmlIn);
      except on E: Exception do
        begin
          HisMzFuncs.WriteLog(e.Message);
          HpFuncs.WriteEventLog(Event_Level_Error, Event_Type_Apply, e.Message, Request.RemoteAddr);
        end;


      end;


    finally
      LEaiServer.Free;
      CoUninitialize();
    end;

    Response.ContentEncoding  := 'GB2312';
    Response.Content  := LXmlOut;

  end else
  begin
    Response.ContentEncoding  := 'GB2312';
    Response.Content := UTF8Encode('<center>Zs XmlServer:只接受post方法</center>');
  end;
  Handled := True;
end;


经过调试发现问题出在Indy10的IdHTTPWebBrokerBridge.pas代码的如下片断

procedure TIdHTTPAppResponse.SetContent(const AValue: AnsiString);
var
  LValue : string;
  LEncoding: TIdTextEncoding;
  LBytes: TIdBytes;
begin
  LValue := string(AValue);

  FResponseInfo.ContentText := LValue;
  FResponseInfo.ContentLength := Length(LValue);
end;


此处的FResponseInfo.charset没有重新赋值,改成如下代码即可

procedure TIdHTTPAppResponse.SetContent(const AValue: AnsiString);
var
  LValue : string;
  LEncoding: TIdTextEncoding;
  LBytes: TIdBytes;
begin
  LValue := string(AValue);

  //此处为新增加的代码 
  FResponseInfo.CharSet := Self.ContentEncoding;

  FResponseInfo.ContentText := LValue;
  FResponseInfo.ContentLength := Length(LValue);
end;


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值