有個奇怪的問題:登錄頁面中使用Cookie存值,Cookie中要存中文漢字。代碼在本地調試,一切OK,漢字也能順利存到Cookie和從Cookie中讀出,但是放到服務器上不管用了,好好的漢字成了亂碼,原本以為是服務器環境和本地的不一樣,后來一想應該不對,因為代碼放服務器上之后再訪問登錄頁面會和服務器交互,交互必然要有網絡傳輸,而Cookie是存在本地的,就是在服務器向本地寫Cookie的時候,網絡的編碼格式影響了漢字的正常存儲導致漢字亂碼。順着這個思路改代碼,然后測試,通過!
但是新問題來了,在給漢字編碼的時候,常用的有這兩種:HttpUtility.UrlEncode 和 Server.UrlEncode,雖然編碼/解碼成對使用沒問題,但是畢竟是兩種方法,總該是有區別的,網上查了一下,區別如下:
第一:引用:
1、HttpUtility.UrlEncode,HttpUtility.UrlDecode是靜態方法,而Server.UrlEncode,Server.UrlDecode是實例方法。
2、Server是HttpServerUtility類的實例,是System.Web.UI.Page的屬性。
3、用HttpUtility.UrlEncode編碼后的字符串和用Server.UrlEncode進行編碼后的字符串對象不一樣
Server.UrlEncode 可以根據你頁面定義好的編碼方式進行編碼。
而 HttpUtility.UrlDecode則默認以utf8來編碼。 不然你需要自己指定編碼方式:
Encoding gb2312= Encoding.GetEncoding("gb2312");
string v5= HttpUtility.UrlEncode("中文漢字", gb2312);
而 Server.UrlDecode則默認調用web.config中<globalization />節點中指定來編碼
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" />
string v3= Server.UrlEncode("中文漢字");
這兩種方式,在不使用web.config默認的編碼方式時,HttpUtility.UrlEncode比較好用,但是不方便;如果是使用web.config統一編碼,則Server.UrlDecode比較好。另外就是,如果是下載文件而定義編碼方式,最好使用HttpUtility.UrlEncode