今天修改原來的站點,有幾個session和cookies亂碼問題,然后又好好看了一下關於編碼這塊的內容。
大概是:登錄處,用session記錄了一點中文內容。然后cookies也記錄了一點中文內容,取出來以后一下session亂碼一下cookie亂碼
翻代碼查了一下代碼,在統一設置cookies的時候,使用了 Server.UrlEncode ,但是發現,登錄后cookies取出來是亂碼,
然后換為 HttpUtility.UrlEncode 則不亂碼。
猜測這兩個方法默認用的編碼格式不一樣,后來觀察網頁發現,登錄處竟然是gb2312而首頁調用cookies的地方是utf-8 醉了,后來發現是這個文件夾下單獨有一個web.config設定了編碼,也不知道當初為什么這樣子做。。。單獨文件夾還設置單獨編碼。估計是因為拷貝過去沒刪除。。。。按道理整站不應該是統一一個編碼嗎?
然后猜想他們默認編碼方式不一樣后,百度之,如下文章所說,果然是默認編碼方式不一,遂改之,然后整改了所有地方單獨設置編碼的。不再亂碼。
一、HttpUtility.UrlEncode 方法
1、public static string UrlEncode(byte[])
將字節數組轉換為已編碼的 URL 字符串。
2、public static string UrlEncode(string)
對 URL 字符串進行編碼。
3、public static string UrlEncode(string, Encoding)
使用指定的編碼對象對 URL 字符串進行編碼。
4、public static string UrlEncode(byte[], int, int)
從數組中的指定位置開始一直到指定的字節數為止,將字節數組轉換為 URL 編碼的字符串。
二、Server.UrlEncode方法
1、public string UrlEncode(string)
對字符串進行 URL 編碼,並返回已編碼的字符串。
2、public void UrlEncode(string, TextWriter)
URL 對字符串進行編碼,並將結果輸出發送到 TextWriter 輸出流。
三、Server.UrlEncode與HttpUtility.UrlEncode的區別
1、HttpUtility.UrlEncode,HttpUtility.UrlDecode是靜態方法,而Server.UrlEncode,Server.UrlDecode是實例方法。
2、Server是HttpServerUtility類的實例,是System.Web.UI.Page的屬性。
3、Server.UrlEncode的編碼方式是按照本地程序設置的編碼方式進行編碼的,而HttpUtility.UrlEncode是默認的按照utf-8格式進行編碼的,如果需要指定HttpUtility.UrlEncode的編碼方式,則需要:HttpUtility.UrlEncode("學習也休閑", Encoding.GetEncoding("gb2312"));
4、兩者都會如下轉換字符:空格會被轉換為加號、非字母數字字符會被轉換為他們的十六進制表現形式。