现在的位置: 首页 > 综合 > 正文

CodePage的作用

2013年01月09日 ⁄ 综合 ⁄ 共 5534字 ⁄ 字号 评论关闭

从定义中我们可以看出,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

抱歉!评论已关闭.