2017/06/23

How to use URLEncode in Delphi

URL編碼,也稱【百分號編碼(Percent-encoding)】

由於 URL 不能直接接受 UTF8 文字,所以要先轉成百分號編碼後,如此網址才能順利送給 HTTP Server

從 Indy 加入 Delphi 後,就可以用 IdURI.TIdURI 單元進行編碼

以【大 匠 之 風】為例,可以得到如下的結果:

「%E5%A4%A7%20%E5%8C%A0%20%E4%B9%8B%20%E9%A2%A8」

XE7 開始,Delphi 有了新單元:System.TNetEncoding
利用這個單元,也可以得到【近似】於 IdURI 的編碼:

「/%E5%A4%A7%20%E5%8C%A0%20%E4%B9%8B%20%E9%A2%A8」

發現了嗎,多了一個【 /】,Delphi 很貼心的會在轉碼後的文字前面加入【/】符號,方便和前置 HTTP URL 進行組合

TIdURI, TNetEncoding 和 InternetCanonicalizeUrl 的差異圖



圖中的最底下文字方塊,是利用 WinInet.InternetCanonicalizeUrl 編碼後的結果,很明顯不是預期的回傳內容,而且是 Win 平台限定,所以建議不要使用它

結語:

WinAPI 很明顯不是未來設計的方向

Indy 改了這麼多版本,使用方式居然沒有影響,Indy 使用者感到萬幸!

偏好系統原生的開發者,在新版 Delphi 中也獲得了救贖,祝福您!

See also:

沒有留言:

張貼留言