原帖:http://community.csdn.net/Expert/topic/5251/5251455.xml?temp=1.171291E-03
作者:xlyyc (宇)
离开了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就可以欢畅的在国内外不同的服务器下顺利运行起来。
本文分享了作者在使用ASP进行国际化开发时遇到的问题及解决方案,包括UTF-8支持、AJAX应用、父路径访问、ACCESS排序问题及XP调试环境搭建。

被折叠的 条评论
为什么被折叠?



