2013-03-27 74 views
4

我试图获得通过HTTP GET方法将字符串JSON响应,但我得到的是:enter image description hereHTTP GET JSON字符串成

我使用像这样的代码:

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

它返回json数据。我需要得到那个JSON响应memo1。

我该怎么做?

+0

检查您收到的文本编码(应该是在某处的标题),当你正在使用非Unicode德尔福适当的翻译/转换,即UTF-8适用于ANSI。搜索这些条款应该提供大量的例子。 – 2013-03-27 07:13:29

+1

@MarjanVenema:返回字符串的'TIdHTTP.Get()'的重载版本已经完成了。 – 2013-03-27 17:56:21

+0

@RemyLebeau:很酷。很高兴知道。 – 2013-03-28 06:58:24

回答

3

我找到了解决方法。该代码完美无缺。

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; 
+0

有一种方法可以抑制对话框错误并将错误作为文本获取?你尝试'GetURLAsString('http://google.com')'一个弹出的对话框'301永久移动 – 2013-04-25 02:28:05

2

试印的新版本,印还支持非Unicode德尔福。

印地TIdHTTP获取应automatially转换UTF-8为ANSI(有限制):

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