由於 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:
- 維基百科:百分號編碼
- Standard URL encode function?
- Sowas wie UrlEncode
- TNetEncoding - Embarcadero DocWiki
- TIdURIを使わずURLエンコード[JAPAN]
沒有留言:
張貼留言