以下的內容在 Delphi 10.2 (含)以上版本已經解決,新版使用者可以略過不看。
===========================================
TWebRequest 遇到 Unicode
出來江湖混,該還的還是要還。
前端寫久了,還是遇到了 Unicode 解析問題。
以 HTTP Method GET 為例:
http://{local}/action?id=許功蓋堃
已知:
Delphi 2009 以上的 string = UTF-16 格式。
而取得的內容是這樣的:
|
看到這個心都涼了半截
|
仔細攻略了 IdHTTPWebBrokerBridge 和 HTTPApp
兩個單元後,才發現裡頭大部份的函式及屬性都是 AnsiString 而非 String
基礎類別。
而 IdHTTPWebBrokerBridge 單元主要只應用在 HTTP Server 上,搬上 IIS
後就和它無關,所以可以直接忽略這個單元不看,雖然我也是看了它很久很久才驚覺這個答案。(眼神死)
接著再把注意力轉到 HTTPApp 單元,最關鍵的就在這句話:
|
一律使用 AnsiString,Unicode 都不 Unicode 了
|
ExtractHeaderFields
這個函式遇到要解析的內容僅僅只做了百分比符號轉換,還少做了一道Unicode / UTF-8
(UTF8) 編碼轉換的工作。
於是我們的 Unicode 文字就被轉成亂碼直出了。
現在,到底是該 Debug HTTPApp 還是有其它 3rd party 的解法呢?