「sUrl := http://www.DelphiCpp.com/我愛Delphi.txt」
使用 IdHTTP.Get(sUrl, ms) 方法卻怎麼也抓不到,可是也沒有Exception…
李組長眉頭一皺,發現案情並不單純。
於是請了Google大神拜了一下,也發現不少災情。
请问Delphi7怎么解决Indy发送中文字符的问题
Thread: IdHTTP and æøå ??
發現共通點都是靠「TIdTextEncoding」來解決問題
所以原先的作法就修改成這樣:
IdHttp.IOHandler.DefStringEncoding := TIdTextEncoding.ANSI;
IdHttp.Get(sUrl, msNewFile);
然後呢~
才怪!
根本就不行!
執行到IdHttp.IOHandler.DefStringEncoding := TIdTextEncoding.ANSI;這行就出錯了。
原因在 IdHttp.IOHandler = NULL
又參閱了下面文章
Converting Delphi 2007 Indy 10.2.3 to Delphi 2009 Indy 10.5.5
D2009 IdhTTp inavlid code page
既然要指定,就給它一個吧,於是就產生下一段這樣的內容:
if IdHTTP.IOHandler = nil then
IdHTTP.IOHandler := TIdIOHandler.MakeDefaultIOHandler(IdHTTP);
IdHttp.IOHandler.DefStringEncoding := TIdTextEncoding.ANSI;
IdHttp.Get(sUrl, msNewFile);
呼呼…試到這邊總算是可以成功了
至於為什麼不是使用
TIdTextEncoding.ASCII
TIdTextEncoding.UTF8
這兩種方法
在這邊的網站有提到
URL 含中文路徑名稱的終極解法
應該是與Web Server的調整有關,所以我試到 TIdTextEncoding.ANSI 就成功了
其它的,還希望有試過的人回應啦!
2012/10/05更新:
Look at indy IdURI unit, it has two static methods in the TIdURI class for Encode/Decode the URL.
uses
IdURI;
..
begin
S := TIdURI.URLEncode(str);
//
S := TIdURI.URLDecode(str);
end;
感謝Sryang大提供資訊!
資料來源:Standard URL encode function?
Indy 真是太棒啦! (無誤) |
沒有留言:
張貼留言