【发布时间】:2013-07-06 05:51:12
【问题描述】:
我一直在写一些通过 URL 下载指定网页源代码的函数:
function GetWebPage(const url: string): tStringList;
var
idHttp: TidHttp;
begin
Result := tStringList.Create;
idHttp := TidHttp.Create(nil);
// set params
idHttp.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)';
idHttp.Request.AcceptLanguage := 'ru en';
idHttp.Response.KeepAlive := True;
idHttp.HandleRedirects := True;
idHttp.ConnectTimeout := 5000;
idHttp.ReadTimeout := 5000;
try
try
Result.values['responce'] := idHttp.Get(url);
except
Result.values['responce'] := '';
end;
finally
Result.values['code'] := IntToStr(idHttp.ResponseCode);
FreeAndNil(idHttp);
end;
当我指定像 президент.рф 这样的 URL 时,我可以完美地使用英文 URL 地址,在 Indy 旁边,该 URL 将转换为 ?????????.?? -(HTTP 分析器的屏幕截图)
我为我的问题找到了这个解决方案:
idHttp.IOHandler.DefStringEncoding := TEncoding.Ansi;
// also tried - TEncoding.Unicode, TEncoding.UTF8
但它不起作用 - 当我尝试调用我的函数时,我收到错误:
那么,我怎样才能强制它的功能与西里尔地址一起使用?
谢谢。
【问题讨论】:
-
哇,真正的历史用户代理...但是无论如何,您使用的是哪个版本的 Delphi?你能在你的问题中添加正确的标签吗?
-
我正在使用 Delphi XE3 :)
-
访问冲突意味着您正在访问无效的内存。您正在调试器中运行,所以让它准确地告诉您哪些代码失败了。
标签: delphi indy delphi-xe3 cyrillic