Allen 2009-08-30 23:32:49 7732 0 0 0 0

今天作ASP网页时,莫名其妙的出现乱码,改变编码也不行,搜了好多资料,终于找到一篇文章,了解了产生的原因并解决了错误。现在总结一下。

关键在以下的两句:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  

    --在网页最前面几句中,这句中codepage就是关键了,目的就是告诉浏览器,此页面是何种编码,936代表是简体中文,而950代表繁体中文,65001就是我们今天说的UTF-8编码了。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

   --在网页Header部分,这句是告诉页面以什么样的编码返回结果。

这样我们就知道怎么解决这个问题了:就是一定要这两句必须匹配才行。

所以,我们可以用以下两句,这样将采用utf-8来编码和返回结果: 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

也可以用以下两句,采用简体中文来编码和返回结果:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

这样,程序网面编码与返回结果的编码保持一致,就不会出现乱码了!此外,我感觉这个问题不光适用于ASP动态网页,其它网页应该也是一样的问题吧!

此外,修改程序时还发现另外一个问题,当加“<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> ”这句时,网页报错,告诉我“@命令只可以在Active Server Page中使用一次”,害得我把网页注释中的“@”也注释掉了,这才明白为什么大名鼎鼎的W3School网站中联系方式的邮箱也用#来代替!

但重新测试时,错误依旧。后来才发现是引用页中用过了的原因,所以说这个一定要注意,引用页中用过也不行的。

另外又试了一下,其它地方中的“@”是不影响的~~,难道W3School也和一样笨了,不晓得他们为什么用“#”代替~~

列一下参考文章,更有助于理解:

ASP动态网页下UTF-8页面乱码的解决方法 (http://chinaz.com/Program/Asp/052491592007.html)

为什么在ASP里指定了codepage为65001还经常显示乱码。才子在这里将这个问题详细解释一下,以免很多朋友再走弯路,甚至排斥UTF-8。

如果你还不知道UTF-8是什么东东,那才子建议你先去搜索一下UTF-8的相关资料吧。

UTF-8编码之所以被越来越多的人接受甚至喜欢,肯定是有道理的,在WEB2.0盛行的今天,在大谈多浏览器兼容的同时,不得不想到字符编码不同所造成的乱码现象同样需要得到很好的处理.....

在N年以前,IE6以下的所有版本,只要没有安装相应的字库,访问相关的页面都是会乱码的,例如,我是IE5 (Windows2000默认) 的版本,在没有安装IE繁体字库的情况下,访问任何繁体页面的网站都是会乱码的,当然前提是该页面采用了BIG5的Charset,而UTF-8作为一种国际编码就能很好的处理该问题,只要将页面存为UTF-8编码格式,再在页面上将codepage及charset全部定义为utf-8就可以在任何客户端浏览器中显示出完全正确的内容,完全不会乱码......

好了,这里以ASP页面为例,以一个实例来看具体操作吧:

打开新建一个ASP页面,相信玩ASP的朋友都会留意到,许多下载的源码里,页面最上方一般都有一句:

以下为引用的内容:

%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%

前面的language应该不用多说了,vbscript就是ASP默认的脚本语言,其实完全可以不用写,写了好像还会影响页面执行效率,在这里我们先不讨论这个问题。后面的codepage就是关键了,目的就是告诉浏览器,此页面是何种编码,936代表是简体中文,而950代表繁体中文,65001就是我们今天说的UTF-8编码了。我们将936改成65001。整句如下:

以下为引用的内容:

%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%

再加上输出几个中文字看看能不能正确显示吧。

以下为引用的内容:
<%
Response.Write "第一次测试UTF-8页面"
%>

 
OK,直接点击“保存”,执行这个页面看看,如果不出意外,大家可能看到显示出的是 “一尾UTF-8页”这几个字,中文有乱码的现象,什么原因呢?

OK,请大家再点击最上面的 "文件" 菜单,选择"另存为",最下面一行有个编码,默认应该是ANSI的,请大家点下拉框,选择UTF-8,再点保存,再执行试试看,如果不出意外,乱得更厉害了,呵呵,晕了吧。别急,想想原因,因为我们做的页面是HTML返回的,以前我们写HTML时,看到body前面,也就是head里都有一句meta,应该是这样的:

以下为引用的内容:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

  
也就是指定页面以gb2312编码返回结果,一定要写在有返回结果输出的前面。大家都知道gb2312是简体中文吧,我们今天说的是UTF-8编码,我们就将gb2312改成UTF-8吧,全部代码如下:

以下为引用的内容:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<%
Response.Write "第一次测试UTF-8页面"
%>

  
再执行看看,嗯,这次正常显示了吧.......

结论:采用UTF-8编码,除了要将文件另存为UTF-8格式之外,还需要同时指定codepage及charset。


Tag: 网页编程 ASP知识 电脑综合 TTTBLOG
我也要发一个   ·   返回首页   ·   返回[Asp.net]   ·   前一个   ·   下一个
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Asp.net]   ·   返回顶部