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;
问题解决!