哪的資料都不如官方資料權威。今天總算從MSDN中擇出了ASP編碼問題的解決方案。
這句話解釋清楚了 @CODEPAGE ,Response.CodePage,Session.CodePage 分別的作用是什么。 @CODEPAGE 作用于所有靜態(tài)的字符串,比如某文件中的 const blogname="我的家" Response.CodePage,Session.CodePage作用于所有動態(tài)輸出的字符串,比如<%=blogname%> 這句話很關鍵的是說明了Response.CodePage的作用范圍是a single response,而SXNA中聲明的Session.CodePage的作用范圍是all responses in a session。
這 句話我乍一看,把意思理解成了這樣:在sessions are enabled的時候,如果Response.CodePage沒有聲明,則Response.CodePage會被Session.CodePage賦 值。如果sessions are not enabled的時候, 如果@CodePage已聲明,則Response.CodePage會被@CodePage賦值,等等............. 這句話 解釋了為什么從SXNA中出來以后進入一些別的頁面比如oblog,z-blog等等容易出現(xiàn)亂碼,因為其他程序沒有聲明 Response.CodePage而恰巧SXNA聲明了Session.CodePage,因此一進入SXNA,Session.CodePage立即 被賦值(版本不同,有的版本賦了936有的版本賦了65001), 而后進入其他程序的時候Response.CodePage馬上被Session.CodePage賦值 , 如果這時Response.CodePage與頁面本身編碼不一樣的話 , 頁面就會出現(xiàn)亂碼。所以進入z-blog出現(xiàn)亂碼的時候我查了當時的Session.CodePage和Response.CodePage都是936, 而進入oblog出現(xiàn)亂碼的時候Session.CodePage和Response.CodePage都是65001.就是說要想保證葉面不出現(xiàn)亂碼, 應該聲明Response.CodePage,否則他就會按照Session.CodePage來解釋網頁(而不是按照@codepage解釋網頁). 如 果僅僅按照上面的解釋的話,我實際上是很糊涂的,因為我們都是用的中文操系統(tǒng),當每一次進入瀏覽器的時候你可以嘗試輸出 Session.CodePage,能看到他都是936!為什么進入Z-blog的時候他不把默認的Session.CodePage的936賦給 Response.CodePage呢?反而把@CodePage給了Response.CodePage?什么情況下Session.CodePage 才賦值給Response.CodePage呢?原文的sessions are enabled應該如何理解呢? 也許上面的話應該這樣理解:
因為Zblog和Oblog都聲明了@CodePage,所以,用戶剛剛啟動完機器然后進入瀏覽器瀏覽Zblog和Oblog的時候Response.CodePage會被@CodePage賦值,于是葉面顯示正常。
其中比較有用的一句話是說如果Response.CodePage和 @CODEPAGE 不一樣的話會產生亂碼。也就是說當Z-blog的 @CODEPAGE =65001而Z-blog的Response.CodePage被Session.CodePage賦為936的時候就會出現(xiàn)亂碼,oblog反之亦然。 不知道上面說了這么多解釋清楚沒有-_-||
當用戶進入瀏覽器的時候Session.CodePage默認為936,這個時候的默認936不是程序聲明的,因此不會賦給Response.CodePage,當進入SXNA的時候, Session.CodePage 被上面那段代碼一折騰就變成了程序聲明的 Session.CodePage=936 ,因此再進入Zblog的時候就把936給了Response.CodePage。 至此,全部原因已經分析清楚了。 因此說,保證asp葉面一定不會出現(xiàn)亂碼的代碼應該是這樣的:(假定是UTF-8的葉子)
進一步說明為什么要加Response.Charset,因為MSDN說應該加...呵呵
另外,文件的編碼格式應該與@CODEPAGE一樣:
這就是為什么zblog,pjblog等一些程序要吧文件存成UTF8編碼格式的原因. 綜上,如果所有的程序都聲明了Response.CodePage就不會被Session.CodePage干擾而出現(xiàn)亂碼了。所以Session.CodePage還是不能輕易用的!
參考文章: Tags: CodePage ASP 編碼 亂碼發(fā)布:sipo | 分類:ASP | 評論:12 | 引用:5 | 瀏覽:1241
|
|