HTTP GETメソッドを介して文字列に対してjson応答を取得しようとしていますが、取得したのは次のとおりです。
私はそのようなコードを使用しています:
memo1.Text:= idhttp1.Get('http://blabla.com/bla.php');
jsonデータを返します。memo1に対するjsonの応答を取得する必要があります。
どうやってやるの?
私は解決策を見つけました。そのコードは完璧に機能します。
function GetURLAsString(aURL: string): string;
var
lHTTP: TIdHTTP;
lStream: TStringStream;
begin
lHTTP := TIdHTTP.Create(nil);
lStream := TStringStream.Create(Result);
try
lHTTP.Get(aURL, lStream);
lStream.Position := 0;
Result := lStream.ReadString(lStream.Size);
finally
FreeAndNil(lHTTP);
FreeAndNil(lStream);
end;
end;
新しいバージョンのIndyを試してください。Indyは引き続き非UnicodeDelphiをサポートしています。
Indy TIdHTTP Getは、UTF-8をAnsiに自動的に変換する必要があります(制限付き)。
内部的には、TIdHTTP.Get()はサーバーのUTF-8データをUnicodeにデコードし、2009年より前のバージョンでAnsiStringとして返すときにそれをAnsiに変換します。そのAnsiStringはOSのデフォルトのAnsiコードページを使用するため、OSの現在の言語がサーバーで使用されているUnicode文字をサポートしていない場合、データが失われる可能性があります。 http://forums2.atozed.com/viewtopic.php?f=7&t=3011