gpt4 book ai didi

德尔福。印地和西里尔字母

转载 作者:行者123 更新时间:2023-12-03 18:16:25 38 4
gpt4 key购买 nike

我一直在写一些通过 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 分析器的屏幕截图)

enter image description here

我找到了解决我问题的方法:

idHttp.IOHandler.DefStringEncoding := TEncoding.Ansi; 
// also tried - TEncoding.Unicode, TEncoding.UTF8

但它不起作用 - 当我尝试调用我的函数时,出现错误:

enter image description here

那么,我如何才能强制其函数与西里尔地址一起使用?

谢谢。

最佳答案

URL 中只能包含 ASCII 字符。在将其传递给 TIdHTTP 之前,您需要预先格式化 URL 以对非 ASCII 字符进行编码。为此,您可以使用 TIdURI.URLEncode() 方法,例如:

Result.values['responce'] := idHttp.Get(TIdURI.URLEncode(url));
GetWebPage('http://президент.рф');

UTF-8 通常用于 URL 编码,因此它是 TIdURL 使用的默认编码,但并非所有服务器都使用 UTF-8,因此如果您需要使用不同的编码,则 TIdURI.URLEncode() 有一个可选的 AByteEncoding 参数用于该目的。

话虽如此,使用 IRIs 可以更好地服务于国际资源而不是 URL,但 Indy 本身还不支持 IRI(将在 Indy 11 中实现)。

关于德尔福。印地和西里尔字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17500112/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com