瀏覽器對有中文參數的url大部分都用utf-8編碼,但我也曾經遇見過用GB2312編碼的;如果遇見這樣情況,那么接受到的參數就會出現亂碼。亂碼情況視服務器解碼方式,Asp.Net網站一般默認為utf-8解碼,如果GB2312編碼就會出現亂碼。
最佳的解決辦法:
當然是使用js編碼參數后再進行get或post:
encodeURIComponent
特殊情況:
當然這是普通情況,如遇到自己沒辦法編碼后呢?直接上代碼:
string input = GetUrlParam(key).ToLower();//GetUrlParam 是獲取url參數原始編碼的方法
if (input.Length == 0)
return string.Empty;
//首先用utf-8進行解碼
string result = HttpUtility.UrlDecode(input, Encoding.UTF8);
// 將已經解碼的字符再次進行編碼.
string encode = HttpUtility.UrlEncode(result, Encoding.UTF8).ToLower();
//與原來編碼進行對比,如果不一致說明解碼未正確,用gb2312進行解碼
if (input != encode)
result = HttpUtility.UrlDecode(input, Encoding.GetEncoding("gb2312"));
return result;