再次用ASP(ASP在新形势\新背景下需要注意的东西)

xlyyc 2006-12-23 04:42:31
离开了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就可以欢畅的在国内外不同的服务器下顺利运行起来。
...全文
237 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
btbtd 2006-12-24
  • 打赏
  • 举报
回复
用过 mysql, 后来跟 linux 一起讨厌掉, 出错率N高.
  • 打赏
  • 举报
回复
从来不用mysql,最好还是都用ms的东西
goodloop 2006-12-24
  • 打赏
  • 举报
回复
这篇文很实在,最近小弟还是一直在弄ASP 的东西,LZ 写的东西小弟也遇到过,实在是没办法
tangqiaojie 2006-12-24
  • 打赏
  • 举报
回复
MARK
擒兽 2006-12-23
  • 打赏
  • 举报
回复
呵呵,反正ASP还是能解决多国语言的。 我用它做了一套系统支持若干语言,自带字典库,字典库用Access或Excel都可以。
penglewen 2006-12-23
  • 打赏
  • 举报
回复
不错...谢谢分享,下次碰到这样的问题,再来看看楼主的贴....
heartbreakee 2006-12-23
  • 打赏
  • 举报
回复
抢个沙发。
LZ好人啊~~
学习~~
收藏

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧