0
我是HTTP新手。我有幾個HTTP GET返回以ANSI或UTF-8編碼的文本。是否有方法可以確定哪些返回,以便我可以在方法中處理轉換,而不是進行試驗併爲每個轉換進行必要的轉換硬編碼?或者如果它可以由Indy自己處理?如何確定TIdHTTP中的響應數據編碼?
下面是我用得到:
主要方法
procedure TIdHTTPHelper.SendGet
(const AURL : String;
var AResponse: TMemoryStream);
begin
Request.ContentType := '';
Request.ContentLength := -1;
Get (AURL, AResponse);
AResponse.Position := 0;
end;
重載方法對於字符串
procedure TIdHTTPHelper.SendGet
(const AURL : String;
var AResponse: String);
var
Response : TMemoryStream;
begin
Response := TMemoryStream.Create;
SendGet (AURL, Response);
SetLength (AResponse, Response.Size div 2);
Response.Read (AResponse [1], Response.Size);
Response.Free;
end;
你應該檢查Content-Type頭的一個'Charset'參數。 –
前段時間我有類似的問題,我認爲[Remy Lebeau的回答](http://stackoverflow.com/a/18832982/800214)可以提供幫助。無論如何,不要使用TMemoryStream來處理字符串,請使用TStringStream – whosrdaddy
不要使用'TStringStream'!在D2009 +中,它需要你在構造函數中指定一個'TEncoding',並且之後你不能改變它。除非您事先知道確切的字符集,否則很容易使編碼不匹配並導致轉換失敗。 –