asp 国际化乱码问题

离开了ASP开发阵营将近4年,其间一直钻研JAVA技术。
最近接个荷兰外单,功能要求很简单,但是需要国际化、而且方便部署。
考虑到服务器在国外,不方便远程维护,而ASP在部署和维护上还是很方便的。于是就决定用ASP了。
于是很自然遇到几个问题
一 UTF-8问题
  既然是国际化,那么自然是需要支持UTF-8的,本来考虑使用ASP+MYSQL+FSO,觉得应该很easy,没有想到一上来就碰个钉子!
ASP真是个老技术了!
我的做法如下:
  所有的ASP都要有
<%@CODEPAGE=65001%>
<%
Response.codePage=65001
Response.ContentType = "text/html"
Response.CharSet = "utf-8"
%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  并且另存为UTF-8格式
  FSO并不支持直接生成UTF-8,得用下面的程序
<%
'-------------------------------------------------
'函数名称:ReadTextFile
'作用:利用AdoDb.Stream对象来读取UTF-8格式的文本文件
'调用举例:ReadFromTextFile ("xxx.txt","utf-8")
'----------------------------------------------------
function ReadFromTextFile (FileUrl,CharSet)
 dim str
 set stm=server.CreateObject("adodb.stream")
 stm.Type=2
 stm.mode=3
 stm.charset=CharSet
 stm.open
 stm.loadfromfile server.MapPath(FileUrl)
 str=stm.readtext
 stm.Close
 set stm=nothing
 ReadFromTextFile=str
end function
'-------------------------------------------------
'函数名称:WriteToTextFile
'作用:利用AdoDb.Stream对象来写入UTF-8格式的文本文件
'调用举例:call WriteToTextFile ("xxx.txt","abcdef","utf-8")
'----------------------------------------------------
Sub WriteToTextFile (FileUrl,byval Str,CharSet)
 set stm=server.CreateObject("adodb.stream")
 stm.Type=2
 stm.mode=3
 stm.charset=CharSet
 stm.open
 stm.WriteText str
 stm.SaveToFile server.MapPath(FileUrl),2
 stm.flush
 stm.Close
 set stm=nothing
end Sub
%>
   于是ASP和文件操作都很顺利,但是在连接MYSQL时候,还是遇到了难题,以下代码:
strConn="Driver={MySQL ODBC 3.51 Driver};Server=localhost;CharSet=utf8;Port=3312;Option=0;Socket=;Stmt=;Database=aa;Uid=root;Pwd=admin;"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strConn
Conn.Execute "SET NAMES 'utf8';"
   本来觉得OK了,但是,在ASP中读记录时候,中文居然都是乱码!
开始觉得没有什么了不起的,在用JAVA的时候中文问题就有很多经验了,于是GOOGLE。
FUCK!居然一天都没有进展!所有能够找到的ASP+MYSQL的例子,居然都不能支持中文。
看来问题不那么简单啊,翻了一天的网页,终于发现一个台湾人的帖子,他遇到了同样的问题,解决方案居然是在中文插入前使用Server.HTMLEncode,这样保存到MYSQL的中文都是编码后的字符串,很奇怪,这样的编码ASP竟然可以正常显示为中文!
看来要怀疑一下MYSQL的UTF8和ASP的UTF-8根本不是一回事!
这样的解决方案我很怀疑以后会有什么不测的问题,于是决定改为ASP+ACCESS。

二 使用AJAX
 现在还是很流行这个东西的,我也不是为了流行而流行,毕竟这个项目需要支持中文和英文,如果使用AJAX的话,可以达到表示层和业务层分开的目的,这样就会很方便了。
使用了prototype.js,这个东西还是很好的,代码会很简洁。
借鉴MVC模式,表示层和控制层为AJAX,MODEL、业务层ASP,通过AJAX来决定该请求那个ASP开放的方法,ASP返回组织好的数据,这样做带来了一个好处,界面中英文换起来很快,而ASP程序根本不需要修改任何一行。

三 父路径问题
 微软为安全问题,看来也是焦头烂额了,IIS开始默认禁止父路径。这个好办,改为使用虚拟路径
比如<!--#include virtual="/inc/conn.inc"-->

四 ACCESS中文操作系统下默认排序的问题
  由于服务器操作系统是英文,所以在中文环境下默认的ACCESS排序设置不能用到英文服务器环境下,连接ACCESS的时候会报错。
  这个问题也好解决,修改ACCESS的默认排序,重新生成ACCESS文件即可。

五 XP下的调试环境
  主要是会有提示没有可更新的查询,权限设置有关,去GOOGLE一下就知道如何解决了。

上面的几个问题注意到了,ASP就可以欢畅的在国内外不同的服务器下顺利运行起来。



'引用自http://www.xici.net/b2721/d46820604.htm


文章来自: 本站原创
引用通告地址: http://www.is21.cn/trackback.asp?tbID=497
Tags:
评论: 0 | 引用: 0 | 查看次数: 1641
发表评论
你没有权限发表留言!