网页语言编码及asp乱码问题解决方案

最近公司有一个日文项目,由于之前使用的是自己开发的中文CMS,并没有将语言包分离,在网站建设调试过程中出现了令人头疼的乱码问题。

乱码出现的原因

由于各个字符编码的储存空间不一样,所以当使用不同的字符读取数据时,当字符空间过小,就不能正常显示了。

比如说中文字符的字符集一般是gb2312,如果用utf-8强制读取改变gb2312的字符,就有可能出现乱码。因为utf-8的字符集储存空间大于gb2312,当使用utf-8读取时,有些字符gb2312的编码中是不存在的,不存在的字符自然会出现乱码了。对于静态文件来说,如果文件的储存编码和网页中编码设置(charset)不一致的话,由于以上原因就会出现乱码问题。

ASP生成静态文件时的乱码问题

以上是对于乱码问题的简单分析,在解决现有问题时有涉及到了asp对国际化的支持。

涉及到三个函数: @CODEPAGEResponse.CodePage,Session.CodePage

下面是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.

这三个函数都可以设置asp的编码,其中 @CODEPAGE 相当于php中的header,必须在文档的开始发出。

在中文操作系统的IIS中,默认的为gb2312,参数值是:”936″,而日文需要指定文档CODEPAGE :

<%@ CODEPAGE=932 %>

<%@ codepage=936%>简体中文
<%@ codepage=950%>繁体中文
<%@ codepage=65001%>UTF-8

我们使用这个函数来设置文档编码具体的使用方法可以参考:http://www.cloudward.net/techLife/article.asp?id=490

现在应该没有问题了吧?哇,问题仍然存在。考虑到SEO公司的asp程序全部需要生成静态页面。而生成的页面全部是windows默认的ANSI,其中包含日文字符仍然会出现乱码。这样我们需要一个asp的函数,生成utf-8或者日文编码的文件。 我们使用以下代码完成:

Set objStream = Server.CreateObject(”ADODB.Stream”)
With objStream
.Open
.Charset = “utf-8″ //编码,这里你可以改成任何编码
.Position = objStream.Size
.WriteText=pencat //pencat 为写入的数据
.SaveToFile server.mappath(”patch/flilename.html”),2 //生成文件路径
.Close
End With
Set objStream = Nothing

经测试后乱码的问题解决。

参考文章:

4 Responses for 网页语言编码及asp乱码问题解决方案 :

1: 2007-09-10, 22:09, Ying Fan says:

我请别人给我做了一个英文网站,正在制作。他们用的语言编码是gb2312, 还用了UTF8, asp, 因为这个网站是针对英美市场的,(网站的页面是纯英文的,没有中文)。所以我打算将服务器放在美国,不知道是否会出现乱码,盼望着你的回信。谢谢。

2: 2007-09-11, 9:32, xiaop says:

英文的网站使用GB2312不会出现乱码。因为GB2312的储存空间比英文(ISO-8859-1)大得多。

可能出现的问题是美国的服务器默认编码为ISO-8859-1,如果手工发送header,有可能会出现乱码。建议使用UTF-8或者ISO-8859-1编码。

3: 2007-09-12, 0:06, Ying Fan says:

Thank you for your reply. I am a new hand for computer and website, It is just because when I try to do a website, then I begin to pay attention about those, hope you can give me some help. Could you tell me the meaning of “手工发送header”.
By the way, I found your English is very good.
UTF-8 和 ISO-8859-1 也是语言编码吗

4: 2007-10-10, 11:48, xiaop says:

“手工发送header”指的是在执行程序前指定文档的编码,asp中这样来实现:
< %@ CODEPAGE=932 %>

UTF-8 和 ISO-8859-1 准确的来说应该叫做字符集。

涉及到乱码的问题,简单的说就是要保证网站内编码一致。涉及到程序和数据库的网站,最好要保证:

程序文件、数据库读取、最终生成的html中的字符集一致。

如还有问题请与小皮联系:canzon@gmail.com

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>