日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

asp关于从utf8页面到gb2312页面出现乱码得解决

發布時間:2024/8/22 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp关于从utf8页面到gb2312页面出现乱码得解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(轉載,原網址記不清楚了)

?

昨天做了兩個asp頁面,一個是utf-8得頁面一個則是gb2312得頁面.
于是發生了件怪事(主要是我第一次遇見得),單獨打開這兩個頁面都不會出現問題,
但偏偏從utf8連接到gb2312得時候就出現了亂碼.花了兩個小時都搞不掉,
今天再次打開,baidu了下結果.
后來發現兩個解決方案
第一:在每個gb2312頁面上設置Session.CodePage=936
這樣問題就解決了...
第二:從utf8轉到gb2312得時候不要用<a>連接.用response.redirect跳轉,也能解決.

綜上,我理解為
給每個頁面設置CodePage這樣就把各個頁面得編碼都獨立起來,不再受相連頁面得影響
其次<a>標簽連接會將頁面編碼屬性也傳遞給下一個頁面,而使用redirect就不會出現這樣得情況了,這跟
用asp得環境變量取Request.ServerVariables("HTTP_REFERER")一樣,后者就取不到.


另附上
對于ASP編碼問題的深入研究與最終解決方案

哪的資料都不如官方資料權威。今天總算從MSDN中擇出了ASP編碼問題的解決方案。

下面是MSDN中的一段話。

Setting @CODEPAGE explicitly affects literal strings in a single response. Response.CodePage affects dynamic strings in a single response, and Session.CodePage affects dynamic strings in all responses in a session.

這句話解釋清楚了@CODEPAGE,Response.CodePage,Session.CodePage 分別的作用是什么。

@CODEPAGE作用于所有靜態的字符串,比如某文件中的 const blogname="我的家"

Response.CodePage,Session.CodePage作用于所有動態輸出的字符串,比如<%=blogname%>

這句話很關鍵的是說明了Response.CodePage的作用范圍是a single response,而SXNA中聲明的Session.CodePage的作用范圍是all responses in a session。

再看另外一句話。

If Response.CodePage is not explicitly set in a page, it is implicitly set by Session.CodePage, if sessions are enabled. If sessions are not enabled, Response.CodePage is set by @CodePage, if @CodePage is present in the page. If there is no @CodePage in the page, Response.CodePage is set by the AspCodePage metabase property. If the AspCodePage metabase property is not set, or set to 0, Response.CodePage is set by the system ANSI code page.

這句話我乍一看,把意思理解成了這樣:在sessions are enabled的時候,如果Response.CodePage沒有聲明,則Response.CodePage會被Session.CodePage賦值。如果sessions are not enabled的時候, 如果@CodePage已聲明,則Response.CodePage會被@CodePage賦值,等等.............

這句話解釋了為什么從SXNA中出來以后進入一些別的頁面比如oblog,z-blog等等容易出現亂碼,因為其他程序沒有聲明Response.CodePage而恰巧SXNA聲明了Session.CodePage,因此一進入SXNA,Session.CodePage立即被賦值(版本不同,有的版本賦了936有的版本賦了65001),而后進入其他程序的時候Response.CodePage馬上被Session.CodePage賦值,如果這時Response.CodePage與頁面本身編碼不一樣的話,頁面就會出現亂碼。所以進入z-blog出現亂碼的時候我查了當時的Session.CodePage和Response.CodePage都是936,而進入oblog出現亂碼的時候Session.CodePage和Response.CodePage都是65001.就是說要想保證葉面不出現亂碼,應該聲明Response.CodePage,否則他就會按照Session.CodePage來解釋網頁(而不是按照@codepage解釋網頁).

如果僅僅按照上面的解釋的話,我實際上是很糊涂的,因為我們都是用的中文操系統,當每一次進入瀏覽器的時候你可以嘗試輸出Session.CodePage,能看到他都是936!為什么進入Z-blog的時候他不把默認的Session.CodePage的936賦給Response.CodePage呢?反而把@CodePage給了Response.CodePage?什么情況下Session.CodePage才賦值給Response.CodePage呢?原文的sessions are enabled應該如何理解呢?

也許上面的話應該這樣理解:

在Session.CodePage被任何程序聲明的時候,如果Response.CodePage沒有聲明,則Response.CodePage會被Session.CodePage賦值。如果Session.CodePage沒有被任何程序聲明的時候, 如果@CodePage已聲明,則Response.CodePage會被@CodePage賦值,....,最后的頁面動態內容部分按照Response.CodePage的值解釋。

因為Zblog和Oblog都聲明了@CodePage,所以,用戶剛剛啟動完機器然后進入瀏覽器瀏覽Zblog和Oblog的時候Response.CodePage會被@CodePage賦值,于是葉面顯示正常。

這句話進一步解釋了產生亂碼的原因

If you set Response.CodePage or Session.CodePage explicitly, do so before sending non-literal strings to the client. If you use literal and non-literal strings in the same page, make sure the code page of @CODEPAGE matches the code page of Response.CodePage, or the literal strings are encoded differently from the non-literal strings and display incorrectly.

其中比較有用的一句話是說如果Response.CodePage和@CODEPAGE不一樣的話會產生亂碼。也就是說當Z-blog的@CODEPAGE=65001而Z-blog的Response.CodePage被Session.CodePage賦為936的時候就會出現亂碼,oblog反之亦然。

不知道上面說了這么多解釋清楚沒有-_-||

下面解釋一下為什么SXNA有時會把Session.CodePage賦為936,我有一個版本是這樣寫的:

<% OriginalCodePage=Session.CodePage %>

.......

<% Session.CodePage=OriginalCodePage %>

當用戶進入瀏覽器的時候Session.CodePage默認為936,這個時候的默認936不是程序聲明的,因此不會賦給Response.CodePage,當進入SXNA的時候,Session.CodePage被上面那段代碼一折騰就變成了程序聲明的Session.CodePage=936,因此再進入Zblog的時候就把936給了Response.CodePage。

至此,全部原因已經分析清楚了。

因此說,保證asp葉面一定不會出現亂碼的代碼應該是這樣的:(假定是UTF-8的葉子)

<%@ CODEPAGE=65001 %>

<% Response.CodePage=65001%>

<% Response.Charset="UTF-8" %>

進一步說明為什么要加Response.Charset,因為MSDN說應該加...呵呵

If the code page is set in a page, then Response.Charset should also be set.

另外,文件的編碼格式應該與@CODEPAGE一樣:

The file format of a Web page must be the same as the @CODEPAGE used in the page.

這就是為什么zblog,pjblog等一些程序要吧文件存成UTF8編碼格式的原因.

綜上,如果所有的程序都聲明了Response.CodePage就不會被Session.CodePage干擾而出現亂碼了。所以Session.CodePage還是不能輕易用的!

參考文章:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/html/268f1db1-9a36-4591-956b-d7269aeadcb0.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/html/582e6f47-52eb-413e-8b5d-c99145cb61d8.asp

?

?

2009年6月6日

轉載于:https://www.cnblogs.com/Frontview/archive/2009/06/06/1497764.html

總結

以上是生活随笔為你收集整理的asp关于从utf8页面到gb2312页面出现乱码得解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91刺激| 欧美日本中文 | 精品电影在线观看 | 天堂va欧美ⅴa亚洲va一国产 | 狠狠干天天 | 国产麻豆天美果冻无码视频 | 国产伦子伦对白视频 | 日本老师巨大bbw丰满 | 国产区一区二区三区 | 日本一区二区三区视频在线 | 亚洲片国产一区一级在线观看 | 毛片基地免费观看 | 久久久久久久久久成人 | 亚洲v视频 | 国产在线观看免费视频软件 | 欧美日韩亚洲激情 | 在线播放黄色网址 | 在线观看毛片av | 四虎一区二区 | 久久综合精品视频 | 啪啪免费视频网站 | 日韩资源在线观看 | 亚洲人成久久 | 俄罗斯videodesxo极品 | 国产字幕av | 久久久久人妻一道无码AV | 蜜桃tv在线观看 | 四虎影视大全 | 欧美第一页浮力影院 | 日韩夜夜操 | 久久久美女视频 | 肉大榛一进一出免费视频 | 在线观看sm | 日韩一区欧美一区 | 成人免费久久 | 麻豆视频免费网站 | 日本少妇裸体 | 性色一区二区 | 东北高大丰满bbbbzbbb | 国产乱淫av片 | 日韩精品久| porn国产 | 麻豆精品 | 亚洲欧美少妇 | 欧美亚州 | 一区av在线 | 中国国产黄色片 | 双腿张开被9个男人调教 | 黄色网炮 | 日韩av一区二区在线 | 91视频这里只有精品 | 人人插人人草 | 精品国产自在精品国产精小说 | 韩国精品在线观看 | 国产精品三级久久久久久电影 | 干美女视频 | 四川少妇xxx奶大xxx | 美女扒开腿让男生捅 | 久久一久久 | 日本美女一级片 | 国产学生美女无遮拦高潮视频 | 成熟女人毛片www免费版在线 | 瑟瑟网站免费 | 欧美性生活视频 | 午夜一区在线观看 | 91精品人妻一区二区三区果冻 | 97精品视频在线 | 久久99婷婷 | av免费播放 | 欧美亚洲日本 | 97色在线 | 苏晴忘穿内裤坐公交车被揉到视频 | avav亚洲 | 北条麻妃一区二区三区在线观看 | 精品无码久久久久久久久 | 日韩欧美综合久久 | 91色在线观看 | 欧美午夜在线视频 | 一区二区三区在线播放视频 | 高清免费av | 婷婷亚洲综合 | 成人精品一区二区三区电影 | 午夜在线看 | 绝顶高潮合集videos | 日本伦理一区二区 | 国产伦一区二区 | 传媒视频在线观看 | 亚洲成av人片在线观看 | 波多野结衣视频网址 | 色婷婷国产精品视频 | 美女伊人网 | aaaaaabbbbbb毛片 | 国产农村妇女aaaaa视频 | 深夜免费福利视频 | 欧美国产大片 | 婷婷综合在线视频 | a√国产| 看黄色一级 | 一级片免费网址 |