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;
问题解决!
浙公网安备 33010602011771号