【问题标题】:Http get json into stringHttp获取json成字符串
【发布时间】:2013-03-17 02:33:08
【问题描述】:

我正在尝试通过 HTTP GET 方法获取对字符串的 json 响应,但我得到的只是:

我正在使用这样的代码:

memo1.Text:= idhttp1.Get('http://blabla.com/bla.php');

它返回 json 数据。我需要得到对 memo1 的 json 响应。

我该怎么做?

【问题讨论】:

  • 检查您收到的文本的编码(应该在标题中的某处)并应用适当的翻译/转换,即 UTF-8 到 Ansi,因为您使用的是非 Unicode Delphi。搜索这些术语应该会找到大量示例。
  • @MarjanVenema:返回字符串的TIdHTTP.Get() 的重载版本已经做到了。
  • @RemyLebeau:酷。很高兴知道。

标签: json delphi delphi-7 indy idhttp


【解决方案1】:

尝试更新版本的 Indy,Indy 仍然支持非 Unicode Delphi。

Indy TIdHTTP Get 应该自动将 UTF-8 转换为 Ansi(有限制):

在内部,TIdHTTP.Get() 将服务器的 UTF-8 数据解码为 Unicode, 然后在将其作为 AnsiString 返回时将其转换为 Ansi 2009 年之前的版本。 AnsiString 使用操作系统的默认 Ansi 代码页,所以是的,如果操作系统当前的 语言不支持正在使用的 Unicode 字符 服务器。 http://forums2.atozed.com/viewtopic.php?f=7&t=3011

【讨论】:

    【解决方案2】:

    我找到了解决方案。该代码完美运行。

    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;
    

    【讨论】:

    • 有办法抑制对话框错误并将错误作为文本获取吗?如果你尝试GetURLAsString('http://google.com') 会弹出一个对话框301 moved permanently
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2017-07-06
    • 2016-03-19
    相关资源
    最近更新 更多