【发布时间】:2019-03-18 21:49:45
【问题描述】:
我在访问带有 utf8 字符集的网站时遇到问题,例如当我尝试访问此 www 时
所有 utf8 字符均未正确编码。 这是我的访问例程:
var
Web : TIdHTTP;
Sito : String;
hIOHand : TIdSSLIOHandlerSocketOpenSSL;
begin
Url := TIdURI.URLEncode(Url);
try
Web := TIdHTTP.Create(nil);
hIOHand := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
hIOHand.DefStringEncoding := IndyTextEncoding_UTF8;
hIOHand.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2,sslvSSLv2,sslvSSLv3,sslvSSLv23];
Web.IOHandler := hIOHand;
Web.Request.CharSet := 'utf-8';
Web.Request.UserAgent := INET_USERAGENT; //Custom user agent string
Web.RedirectMaximum := INET_REDIRECT_MAX; //Maximum redirects
Web.HandleRedirects := INET_REDIRECT_MAX <> 0; //Handle redirects
Web.ReadTimeOut := INET_TIMEOUT_SECS * 1000; //Read timeout msec
try
Sito := Web.Get(Url);
Web.Disconnect;
except
on e : exception do
Sito := 'ERR: ' +Url+#32+e.Message;
end;
finally
Web.Free;
hIOHand.Free;
end;
我尝试了所有解决方案,但在 Sito var 中我发现所有时间错误的字符,例如“名称”的正确值是
"name": "Aire d'adhésion du Parc national du Mercantour",
但是在获取指令之后我有
"name": "Aire d'adhésion du Parc national du Mercantour",
你知道我的错误在哪里吗? 谢谢大家!
【问题讨论】:
-
delphi XE6 的 var 是:Web : TIdHTTP;西托:字符串;
-
FWIW,您问题中的链接在这里不起作用。
-
我更改了文本中的链接,并添加了 var 部分。交易
-
您不应该为 HTTP 设置
DefStringEncoding。您不应为 SSL 启用sslvSSLv2、sslvSSLv3或sslvSSLv23。您不应该设置Request.CharSet。而且您无需致电Disconnect。
标签: delphi indy delphi-xe6