代码改变世界

asp 的<%@codepage=932%>

2009-08-03 12:35  Zhang_Chen  阅读(434)  评论(0编辑  收藏  举报
结论:
codepage指定了IIS按什么编码读取源文件。如果codepage和源文件的实际编码相同,则读取正确,否则就会乱码。有时还会报编译错误,大概意思是无效字符吧。

题外话:
1.一个文件保存格式为GB2312,那么你在编辑的时候,不论是用输入法输入的,还是copy粘贴的,所有的字都会转为GB2312编码。
2.象Mid,Left,Chr,Instr等函数都是面向Unicode形式变量的,他们的入口和出口参数都是unicode形式的,也就是说,进入时从Unicode转为对应编码,出来时转回Unicode。

试验过程:
假设文件a.asp,保存编码格式为GB2312,输入:帳票マッ(日文输入法输入),自动变为GB2312编码的,但因为GB2312字库中有日文,所以显示正常。
上面四个字如果按日文Shift-JIS编码查看,则是: (图片,否则后面三个是空白)。

--A--
.asp中有代码:
---------------------
<%@codepage=936%>
aa="帳票マッ"
response.write aa
-------------------------
输出结果,按charset=GB2312查看为:帳票マッ
按charset=Shift-JIS查看为: 
如果codepage=932,输出按charset=GB2312查看为:帳票マッ
按charset=Shift-JIS查看为: 

过程分析:IIS编译器按936简体中文读取源文件,把“帳票マッ”转为对应的Unicode编码,赋值给变量aa,也就是说LenB(aa)=8。
Response.write输出的时候,从Unicode形式转换到对应的936简体中文编码,输出为html,发送给浏览器,浏览器按charset显示。

--B--
如果把文件的保存编码换为Shift-JIS,注意四个文字要重新输入。保存的是Shift-JIS编码。
<% @codepage=936 %>输出结果,
按charset=GB2312查看为:挔昜儅僢
按shift-jis查看为:帳票マッ
<% @codepage=932 %>输出结果,
按charset=GB2312查看为:挔昜儅僢
按shift-jis查看为:帳票マッ

总结:
GB—按GB读取—对应的Unicode—转回GB—按GB2312查看,正常。
GB—按GB读取—对应的Unicode—转回GB—按Shift-JIS查看,不正常。
GB—按Shift-JIS读取—对应的Unicode—转回Shift-JIS—按GB2312查看,正常。
GB—按Shift-JIS读取—对应的Unicode—转回Shift-JIS—按Shift-JIS查看,不正常。

Shift-JIS---按GB读取—对应的Unicode---转回GB—按GB2312查看,不正常。
Shift-JIS---按GB读取—对应的Unicode---转回GB—按Shift-JIS查看,正常。
Shift-JIS---按Shift-JIS读取—对应的Unicode---转回Shift-JIS—按GB2312查看,不正常。
Shift-JIS---按Shift-JIS读取—对应的Unicode---转回Shift-JIS—按Shift-JIS查看,正常。

可以看出,ASP中的处理是对称的,所以对于直接输出和简单处理的文字,codepage设置为什么都没有影响,只要文件的编码和最终显示的charset相同,那么就会正常显示。