阅读 94

delphi创建HTTPServer服务接收json中文乱码

做服务端,很多人已经淘汰用delphi了,确实,各种中文乱码的问题,也有人劝过我用JavaScript,很简单,连源码都给我了,但是还没时间研究,眼前有个项目,必须提供一个服务供第三方调用,请求方式POST,请求格式JSON,当解析请求的json时发现中文乱码。解决方法如下:

上代码:

procedure TZZJForm.VodHttpServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  tempstr,ips:string;
  ss:TStringStream;
begin
  CoInitialize(NIL);
  BaseJo := so;
  sjo := SO(‘{}‘);
  I :=0; J:=0; K:=0;
  ss := TStringStream.Create;
  AResponseInfo.ContentType := ‘json;charset=utf-8‘; //这句话对POST请求json格式无效,但对于GET请求比较有用
  ips:=TIdIOHandlerSocket(AContext.Connection.IOHandler).Binding.PeerIP;//获取请求地址
  tempstr:=ARequestInfo.Document; //获取请求字符串  GET请求,一般浏览器会请求两次,第一次是实际请求内容,第二次是 favicon.ico,服务器应判断请求的字符串,不然取不到实际值 POST没有
  if tempstr=‘favicon.ico‘ then
  begin
    AResponseInfo.ContentText :=‘{}‘; //返回值
    Exit;
  end;
  if not SameText(ARequestInfo.Command, ‘post‘) then
  begin
    with SJO do
    begin
      I[‘code‘] := -1;
      S[‘message‘] := ‘请使用POST请求‘;
    end;
    AResponseInfo.ContentText := SJO.AsJSon(True);
    Exit;
  end;
  if tempstr<>‘/pmc/seltSucCallback‘ then
  begin
    with SJO do
    begin
      I[‘code‘] := -5;
      S[‘message‘] := ‘无效的请求地址‘;
    end;
    AResponseInfo.ContentText := SJO.AsJSon(True);
    Exit;
  end;
  if tempstr=‘/pmc/seltSucCallback‘ then
  begin
    ss := TStringStream(ARequestInfo.PostStream);
    ss.SaveToFile(‘A.TXT‘); //此文件里的中文正常
    ARequestInfo.PostStream.Create;
//Memo1.Lines.LoadFromStream( ss );//中文乱码
//memo1.lines.add( StreamToString(ARequestInfo.PostStream));//转换成string中文也会乱码
//  .....解析入参...
 end;
end; 

虽然方法笨拙,但能解决燃眉之急,有大神知道其它方法的欢迎指点。

顺便把创建服务的代码贴上:

//创建服务
  try
    VodHttpServer.Bindings.Clear; //VodHttpServer:TIdHTTPServer
    Binding := VodHttpServer.Bindings.Add;
    Binding.Port:=5050;
    binding.IP:= SIP;// //
    VodHttpServer.Active:=true;
  except
    on e:Exception do
    begin
       ShowMessage(‘加载服务设置error ‘+e.message);
    end;
  end;

  

 

原文:https://www.cnblogs.com/studypanp/p/14290928.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐