CodePage的作用

從定義中我們可以看出,CodePage的作用,是決定頁面以何種編碼方式顯示動態內容。當頁面被服務器處理之後,頁面將以CodePage設定的編碼輸出到客戶端。當然,CodePage的參數需正確,否則,將產生錯誤信息“CodePage 值無效。指定的 CodePage 值無效。”(事件ID: 0204)。如果CodePage沒有設置,則服務器使用默認的CodePage加載到你的Session裏面,使用

程序代碼:
Response.Write(Session.CodePage)

可以查看你當前使用的CodePage。

再談一下字符集Charset。當打開一個網頁的時候,瀏覽器在meta裏面找到Charset,並自動選擇對應的字符集來顯示頁面。頁面的數據服務器已經使用CodePage的編碼發送到了客戶端,如果瀏覽器設定的Charset和CodePage不對應,則瀏覽器通常不能看到正確的顯示結果。

知道了以上兩點,我們在ASP頁面中設置的字符集與CodePage對應,則可以讓頁面直接顯示正常結果,否則,則可能需要用戶手動調整瀏覽器設置才能夠正常瀏覽頁面。我們常見的簡體中文(GBK)的CodePage值爲936,字符集名稱爲gb2312;UTP-8的CodePage值爲65001,字符集名稱爲utf-8。

但是,僅憑以上的這些解決方法,並不能完全解決頁面編碼對ASP文件產生的問題。

我們再來了解一下ASP文件被瀏覽的過程。當文件A.asp首次被客戶端請求時:
1、IIS調入該文件,讀入該文件;
2、驗證語法,然後執行處理程序,將結果返回客戶端;
3、瀏覽器緩衝從服務器返回的HTML代碼,解釋執行,將結果顯示出來。
剛纔我們知道了上述的第2、3步,即服務器返回客戶端,客戶端顯示的問題。那麼在第1步中會不會出現編碼問題呢?答案是肯定的。

我們目前使用的Windows操作系統,文本文件默認編碼採用ANSI(American National Standards Institute)。既然大家都採用一種默認編碼,這邊相當於規範化了,於是出問題的時候少。但網絡是國際化的,需要一種國際化的標準,目前這個標準是UTF-8。實際上,對於我們使用的Windows系統,其編碼比較複雜,系統內部採用ANSI+DBCS。(DBCS爲雙字節編碼,支持東亞文字。)而對外服務,大致上是ANSI和Wide_Char混合,相當於UTF-8。UTF-8是一種方向,採用這種編碼將是大勢所趨。如果我們將asp文件上傳到別的服務器,而你的文件中含有該服務器不能正確讀取的編碼,則服務器則根據該編碼的長度以同樣長度的默認字符填充。比如收到一封郵件,所有中文都是兩個"?",相信這種事情大家都遇到過。假如你的asp文件在本地測試是正常的,而上傳到某個服務器,卻發現文字顯示不正常,排除瀏覽器設置的問題之後,你應該首先想到的服務器不支持你文件的編碼。

也許這是你會問兩個問題:
1、爲什麼不支持我文件的編碼,卻能夠執行呢?
這個要感謝ASCII這個先驅,從0開始到7F至的128個編碼都是遵循這個標準的。這已經含括了asp程序中的變量名、函數名、操作符、算子等,所以程序是能夠被執行的,但是如果變量包括的這128以外的編碼,就不一定能夠找到對應的字符了。如果不能找到,系統將採用字符“?”替代。

2、我從客戶端使用正確的編碼能還原嗎?
當然不能。因爲系統返回給客戶端的經過編碼後的數據,最初不能識別的編碼也是轉換成字符“?”後再返回的。所以客戶端能夠還原也是按照“?”還原。這等於程序請求計算1+1、0+2,我不會,不會的我都給返回0,你知道這個0是怎麼來嗎?

羅嗦到這兒,這個解決方法便是:
1、對asp文件採用國際標準UTF-8編碼。
2、對asp文件採用服務器支持的其他編碼。

對於前者,支持保存文本文件爲UTF-8編碼便可以了。
對於後者,通過Response.Write(Session.CodePage)獲得服務器的默認CodePage。然後把文件存儲爲響應的編碼就可以了。

總結一下:
1、採用服務器支持的編碼;
2、修改asp文件CodePage爲該文件格式保存時採用的編碼對應的CodePage值。
3、[建議]設置Charset爲相對應的字符集,採用標籤<meta>或Response.Charset()。

附1:

Code-Page Identifiers for Win32

Identifier Name
037 IBM EBCDIC - U.S./Canada
437 OEM - United States
500 IBM EBCDIC - International
708 Arabic - ASMO 708
709 Arabic - ASMO 449+, BCON V4
710 Arabic - Transparent Arabic
720 Arabic - Transparent ASMO
737 OEM - Greek (formerly 437G)
775 OEM - Baltic
850 OEM - Multilingual Latin I
852 OEM - Latin II
855 OEM - Cyrillic (primarily Russian)
857 OEM - Turkish
858 OEM - Multlingual Latin I + Euro symbol
860 OEM - Portuguese
861 OEM - Icelandic
862 OEM - Hebrew
863 OEM - Canadian-French
864 OEM - Arabic
865 OEM - Nordic
866 OEM - Russian
869 OEM - Modern Greek
870 IBM EBCDIC - Multilingual/ROECE (Latin-2)
874 ANSI/OEM - Thai (same as 28605, ISO 8859-15)
875 IBM EBCDIC - Modern Greek
932 ANSI/OEM - Japanese, Shift-JIS
936 ANSI/OEM - Simplified Chinese (PRC, Singapore)
949 ANSI/OEM - Korean (Unified Hangeul Code)
950 ANSI/OEM - Traditional Chinese (Taiwan; Hong Kong SAR, PRC)
1026 IBM EBCDIC - Turkish (Latin-5)
1047 IBM EBCDIC - Latin 1/Open System
1140 IBM EBCDIC - U.S./Canada (037 + Euro symbol)
1141 IBM EBCDIC - Germany (20273 + Euro symbol)
1142 IBM EBCDIC - Denmark/Norway (20277 + Euro symbol)
1143 IBM EBCDIC - Finland/Sweden (20278 + Euro symbol)
1144 IBM EBCDIC - Italy (20280 + Euro symbol)
1145 IBM EBCDIC - Latin America/Spain (20284 + Euro symbol)
1146 IBM EBCDIC - United Kingdom (20285 + Euro symbol)
1147 IBM EBCDIC - France (20297 + Euro symbol)
1148 IBM EBCDIC - International (500 + Euro symbol)
1149 IBM EBCDIC - Icelandic (20871 + Euro symbol)
1200 Unicode UCS-2 Little-Endian (BMP of ISO 10646)
1201 Unicode UCS-2 Big-Endian
1250 ANSI - Central European
1251 ANSI - Cyrillic
1252 ANSI - Latin I
1253 ANSI - Greek
1254 ANSI - Turkish
1255 ANSI - Hebrew
1256 ANSI - Arabic
1257 ANSI - Baltic
1258 ANSI/OEM - Vietnamese
1361 Korean (Johab)
10000 MAC - Roman
10001 MAC - Japanese
10002 MAC - Traditional Chinese (Big5)
10003 MAC - Korean
10004 MAC - Arabic
10005 MAC - Hebrew
10006 MAC - Greek I
10007 MAC - Cyrillic
10008 MAC - Simplified Chinese (GB 2312)
10010 MAC - Romania
10017 MAC - Ukraine
10021 MAC - Thai
10029 MAC - Latin II
10079 MAC - Icelandic
10081 MAC - Turkish
10082 MAC - Croatia
12000 Unicode UCS-4 Little-Endian
12001 Unicode UCS-4 Big-Endian
20000 CNS - Taiwan
20001 TCA - Taiwan
20002 Eten - Taiwan
20003 IBM5550 - Taiwan
20004 TeleText - Taiwan
20005 Wang - Taiwan
20105 IA5 IRV International Alphabet No. 5 (7-bit)
20106 IA5 German (7-bit)
20107 IA5 Swedish (7-bit)
20108 IA5 Norwegian (7-bit)
20127 US-ASCII (7-bit)
20261 T.61
20269 ISO 6937 Non-Spacing Accent
20273 IBM EBCDIC - Germany
20277 IBM EBCDIC - Denmark/Norway
20278 IBM EBCDIC - Finland/Sweden
20280 IBM EBCDIC - Italy
20284 IBM EBCDIC - Latin America/Spain
20285 IBM EBCDIC - United Kingdom
20290 IBM EBCDIC - Japanese Katakana Extended
20297 IBM EBCDIC - France
20420 IBM EBCDIC - Arabic
20423 IBM EBCDIC - Greek
20424 IBM EBCDIC - Hebrew
20833 IBM EBCDIC - Korean Extended
20838 IBM EBCDIC - Thai
20866 Russian - KOI8-R
20871 IBM EBCDIC - Icelandic
20880 IBM EBCDIC - Cyrillic (Russian)
20905 IBM EBCDIC - Turkish
20924 IBM EBCDIC - Latin-1/Open System (1047 + Euro symbol)
20932 JIS X 0208-1990 & 0121-1990
20936 Simplified Chinese (GB2312)
21025 IBM EBCDIC - Cyrillic (Serbian, Bulgarian)
21027 Extended Alpha Lowercase
21866 Ukrainian (KOI8-U)
28591 ISO 8859-1 Latin I
28592 ISO 8859-2 Central Europe
28593 ISO 8859-3 Latin 3
28594 ISO 8859-4 Baltic
28595 ISO 8859-5 Cyrillic
28596 ISO 8859-6 Arabic
28597 ISO 8859-7 Greek
28598 ISO 8859-8 Hebrew
28599 ISO 8859-9 Latin 5
28605 ISO 8859-15 Latin 9
29001 Europa 3
38598 ISO 8859-8 Hebrew
50220 ISO 2022 Japanese with no halfwidth Katakana
50221 ISO 2022 Japanese with halfwidth Katakana
50222 ISO 2022 Japanese JIS X 0201-1989
50225 ISO 2022 Korean
50227 ISO 2022 Simplified Chinese
50229 ISO 2022 Traditional Chinese
50930 Japanese (Katakana) Extended
50931 US/Canada and Japanese
50933 Korean Extended and Korean
50935 Simplified Chinese Extended and Simplified Chinese
50936 Simplified Chinese
50937 US/Canada and Traditional Chinese
50939 Japanese (Latin) Extended and Japanese
51932 EUC - Japanese
51936 EUC - Simplified Chinese
51949 EUC - Korean
51950 EUC - Traditional Chinese
52936 HZ-GB2312 Simplified Chinese
54936 Windows XP: GB18030 Simplified Chinese (4 Byte)
57002 ISCII Devanagari
57003 ISCII Bengali
57004 ISCII Tamil
57005 ISCII Telugu
57006 ISCII Assamese
57007 ISCII oriya
57008 ISCII Kannada
57009 ISCII Malayalam
57010 ISCII Gujarati
57011 ISCII Punjabi
65000 Unicode UTF-7
65001 Unicode UTF-8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章