如何将Indy UTF-8响应转换为本机Delphi(Unicode)字符串?

Thi*_*ien 3 delphi indy utf-8 character-encoding delphi-2010

使用Indy THTTP我获得了一个响应,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;
Run Code Online (Sandbox Code Playgroud)

我应该改变什么来获得常规的Delphi String......?

Rem*_*eau 6

TIdHTTP有一个重载版本的Get(),它返回一个String.它会将UTF-8解码为UTF-16:

LResponse := LHTTP.Get('url');
Run Code Online (Sandbox Code Playgroud)