我在访问一些采用UTF-8字符集的网站时遇到了问题,例如当我尝试访问这个网站:www
所有的UTF-8字符都没有正确编码。以下是我的访问程序:
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”的正确值是
"name": "Aire d'adhésion du Parc national du Mercantour",
但是在Get指令之后,我得到的是:
"name": "Aire d'adhésion du Parc national du Mercantour",
您有任何想法吗?这是我的错误所在吗?谢谢!
DefStringEncoding
。在SSL中,你不应该启用sslvSSLv2
、sslvSSLv3
或sslvSSLv23
。你不应该设置Request.CharSet
。而且你不需要调用Disconnect
。 - Remy Lebeau