3

IndyTHTTPを使用して、 を持つ応答を取得Content-Type: text/html; charset=UTF-8し、TStringStream. 次に を使用するReponseStream.ReadString(ResponseStream.Size)と、結果Stringが正しく表示されません。これは、Windows が UTF-16 を使用しているためです。

TEncoding.UTF8私はいくつかのことを試しTEncoding.Convertましたが、結果がさらに台無しになりました(中国語に見え始めました)。

現在のコードは次のとおりです。

var
  LHTTP: TIdHTTP;
  LResponseStream: TStringStream;
  LResponse: String;
begin
  LResponseStream := TStringStream.Create();
  try
    LHTTP := TIdHTTP.Create(nil);
    try
      LHTTP.Get('url', LResponseStream); // Returns 'hęllo'
    finally
      LHTTP.Free;
    end;
    LResponseStream.Position := 0;
    LResponse := LResponseStream.ReadString(LResponseStream.Size);
    ShowMessage(LResponse); // Make me pretty
  finally
    LResponseStream.Free;
  end;
end;

通常の Delphi を取得するには、何を変更すればよいStringですか?

4

2 に答える 2

6

TIdHTTP には、文字列を返す Get() のオーバーロードされたバージョンがあります。UTF-8 を UTF-16 にデコードします。

LResponse := LHTTP.Get('url');
于 2013-09-22T16:35:48.503 に答える