UTF-8编码的问题

在工作中,经常需要用到Restful的接口调用,由于往往是推送给对方数据,对方返回状态,所以,只需要给对方推送正确的UTF-8编码即可。这个在我之前的例子里已经有了。

但是最近调用一个接口的时候,发现对方返回给我的,也是UTF-8的编码。但这个UTF-8的字符串,通过UTFDecode转换后,部分汉字正常,部分出现乱码。

然后我用了几种方式,包括ByteBufferToAnsiString, TEncoding.Default.GetString 等,都没有解决问题。

最后突然想到,既然我推送的时候可以,为什么接受的时候不可以呢?我按照推送的方式处理呢?

于是,用推送时一样的方式:

function PostJson(strUrl : string; strJson : string): String;
var
  clHttpRequest: TclHttpRequest;
  clHttp: TclHttp;
  strHTML : TStringStream;
begin
  clHttpRequest := TclHttpRequest.Create(nil);
  clHttpRequest.Header.ContentType :='application/json';
  clHttpRequest.Header.CharSet :='UTF-8';
  clHttpRequest.BuildJSONRequest(strJson);
  clHttp := TclHttp.Create(nil);
  clHttp.Request := clHttpRequest;
  strHTML := TStringStream.Create('', TEnCoding.UTF8) ;
  try
    clHttp.Post(strUrl, clHttpRequest, strHTML);
  except
    on E:Exception do
    begin
      Result :=E.Message;
      FreeAndNil(clHttpRequest);
      FreeAndNil(clHttp);
      Exit;
    end;
  end;
  Result := strHTML.DataString;
  FreeAndNil(strHTML);
  FreeAndNil(clHttpRequest);
  FreeAndNil(clHttp);
end;

  

 

 

问题解决!

 

  

posted on 2022-05-30 10:06  西点肥牛  阅读(116)  评论(0编辑  收藏  举报

导航