【BUG產生背景】
由於網站業務有所改動,需要開放中文用戶名注冊。因此,取消了用戶不能為中文的限制,結果用戶能夠正常注冊,也能夠正常登錄。但是出現了中文用戶名亂碼的BUG!
【使用技術平台】
windows server 2003、IIS6.0、ASP.NET MVC
【解決方案】
其實有點項目經驗的朋友,就知道是編碼問題。但是,問題是為什麼是部分亂碼,並不是所有中文亂碼,這讓很多朋友疑惑。其實仔細的朋友會發現,一般這些用戶信息是放在Session或者Cookie中,所以找到問題的根源,就是Session和Cookie編碼問題。具體解決方案:
1: //寫入cookies時2: HttpCookie cookie = new HttpCookie("LOGIN");3: System.Text.Encoding enc = System.Text.Encoding.GetEncoding("gb2312");4: cookie["userid"] = HttpUtility.UrlEncode(userid, enc);5: cookie["userpassword"] = HttpUtility.UrlEncode(a_userpassword,enc);6: //讀取cookies時7: System.Text.Encoding enc = System.Text.Encoding.GetEncoding("gb2312");8: userid = HttpUtility.UrlDecode(cookie["userid"], enc);9: userpassword = HttpUtility.UrlDecode(cookie["userpassword"].ToString(), enc);