如果網址中含有漢字,瀏覽器會自動將其轉換成URL編碼,而在接收端,它又自動轉換回來。
大部分時候都沒什么問題,但有時候就很討厭。因為生成這種URL編碼,編碼時的字符集和解碼字符集不一定相同,比如編碼時用GB2312,解碼用UTF-8,就出現亂碼。
這個時候,提取到的參數,自然就亂。
解決之道是不要用Request.QueryString來提取,而是用Request.RawUrl來獲取。后者是原始URL,沒有自動解碼的。自己獲取,自己處理。
//scode = Request.QueryString["word"];
int p = Request.RawUrl .IndexOf("word=");
string scode = Request.RawUrl.Substring(p + 5);
另,在瀏覽器的地址欄進行get傳參時,瀏覽器會自動進行一次UrlDecode()的解碼,然后才會傳給程序使用,也就是會先解碼一次,所以如果傳輸中文的參數時,應該進行2次UrlEncode()編碼給瀏覽器,程序再用一次UrlDecode解碼即可,親身試驗過,確實如此。