ASP 文件编码格式与 Server.URLEncode
2005-03-04 01:04
429 查看
最近在修改一个遗产程序,因为要下载文件,而这些文件大部分都是以中文命名的,中文的处理对于一些新兴的语言,比如Java,.net什么的都没有问题,可是这是个 asp 程序。
当我把asp文件采用本地编码时,Server.URLEncode就会使用本地编码来处理,而当我使用UTF-8编码来保存asp文件的时候,它也会自动的采用UTF-8来处理Server.URLEncode,也就是说:
那我的姓“周”举例子吧:
GBK____%D6%DC_____0xD6DC(55004)
UTF-8__%E5%91%A8__U+5468(21608)__周
从上面我们可以看到,当我的asp文件保存成ansi格式的时候,URLEncode就会输出%D6%DC,当我把asp文件保存成UTF-8的时候,它就会输出%E5%91%A8。
而apache,iis处理URLEncode的时候都是使用的UTF-8处理的,可是这个遗产程序是GBK编码的,我不可能仅仅修改那一个asp文件的编码为UTF-8,因为这样那些有bug的IE在页面切换的时候就会发生混乱。而且当我打算把整个程序的asp文件都转成UTF-8的时候,我发现VBScript中的文件输出对UTF-8的支持又很差,虽然我后来找到了输出的解决方法,但是我要测试几乎所有的页面,那是一件很痛苦的事情,调试过asp的人都知道,那莫名其妙的500错误,会让你焦头烂额的,如果不是那些对asp由极大的热情和经验,你根本做不下去。我就是这样的,没有热情,甚至有些讨厌,而且没有足够的经验,它的那些函数的记忆简直比记忆英语单词还难(我好像用错句型了,本来就是比英文单词的记忆还难的)。
所以我期望能够有一个像 java.net.URLEncoder.encode(myString, "UTF-8") 这样的函数,基于我对VBScript的数量程度不够,我都快把搜索引擎搜趴下了(^_^),都没有找到我想要的,后来,我准备根据java代码来写一个VBScript的实现,可是当我看到十几行的java代码后我退缩了,不是因为我害怕java代码,而是我清楚我对VBScript的了解,我无法在一天的时间内完成。
最终我想到了一个不是方法的方法,我打算采用字典的形式来达到目的:
我先用java生成字典:
import java.io.*;
public class T {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("C://URLEncoding.txt");
OutputStreamWriter w = new OutputStreamWriter(fos, "iso-8859-1");
String s = null;
for (int i = 0; i <= 0xFFFF; i++) {
s = "" + (char) i;
w.write(i + "=" + java.net.URLEncoder.encode(s, "UTF-8"));
w.write("/r/n");
}
w.close();
fos.close();
}
}
然后用ASP查询字典来进行URLEncode(下面这段是柠檬(http://3rgb.com)帮忙写的):<%
dim arrDic
Dim objFSO,objFile,strTemplate,strFileName
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(Server.MapPath("./") & "/URLEncoding.txt", 1)
strSource = objFile.ReadAll
set objFSO = nothing
set objFile = nothing
arrDic = split(strSource, vbcrlf)
Function utfoutstr(str)
dim i,j,k,cc,dd,outStr,utfStr
j = Ubound(arrDic) - 1
for k = 1 to len(str)
cc = ascw(mid(str,k,1))
for i = 0 to j
dd = split(arrDic(i),"=")
if clng(cc) = clng(dd(0)) then
utfStr = dd(1)
exit for
end if
next
outStr = outStr & utfStr
next
utfoutstr = outStr
end function
with response
'.write Ubound(arrDic)
.write utfoutstr("周树群")
end with
%>
哦,天那,这就是我的最终代码,我发现效果不错。
哦,天那,这就是我的最终代码,我发现效果不错。不过最后我用到我的程序中发现,压根不管用。
因为编码后的东西是作为参数传给Response.Redirect的,虽然我替换了:,/,.三个符号,还是报错,我猜测是因为Response.Redirect会自己调用Server.URLEncode或者做相似的处理。
我放弃了,我不用改了。
不过我明白了一些函数,chrW,ascW之类的。
也知道了确信了,以后再也不用asp的坚定信念,妈呀,简直噩梦。
几个有用的参考:
http://www.shaoys.com/testart/ShowThesis.asp?DocID=Y2004M11D04H05m12s05
http://blog.csdn.net/daviva/archive/2004/09/21/111564.aspx
当我把asp文件采用本地编码时,Server.URLEncode就会使用本地编码来处理,而当我使用UTF-8编码来保存asp文件的时候,它也会自动的采用UTF-8来处理Server.URLEncode,也就是说:
那我的姓“周”举例子吧:
GBK____%D6%DC_____0xD6DC(55004)
UTF-8__%E5%91%A8__U+5468(21608)__周
从上面我们可以看到,当我的asp文件保存成ansi格式的时候,URLEncode就会输出%D6%DC,当我把asp文件保存成UTF-8的时候,它就会输出%E5%91%A8。
而apache,iis处理URLEncode的时候都是使用的UTF-8处理的,可是这个遗产程序是GBK编码的,我不可能仅仅修改那一个asp文件的编码为UTF-8,因为这样那些有bug的IE在页面切换的时候就会发生混乱。而且当我打算把整个程序的asp文件都转成UTF-8的时候,我发现VBScript中的文件输出对UTF-8的支持又很差,虽然我后来找到了输出的解决方法,但是我要测试几乎所有的页面,那是一件很痛苦的事情,调试过asp的人都知道,那莫名其妙的500错误,会让你焦头烂额的,如果不是那些对asp由极大的热情和经验,你根本做不下去。我就是这样的,没有热情,甚至有些讨厌,而且没有足够的经验,它的那些函数的记忆简直比记忆英语单词还难(我好像用错句型了,本来就是比英文单词的记忆还难的)。
所以我期望能够有一个像 java.net.URLEncoder.encode(myString, "UTF-8") 这样的函数,基于我对VBScript的数量程度不够,我都快把搜索引擎搜趴下了(^_^),都没有找到我想要的,后来,我准备根据java代码来写一个VBScript的实现,可是当我看到十几行的java代码后我退缩了,不是因为我害怕java代码,而是我清楚我对VBScript的了解,我无法在一天的时间内完成。
最终我想到了一个不是方法的方法,我打算采用字典的形式来达到目的:
我先用java生成字典:
import java.io.*;
public class T {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("C://URLEncoding.txt");
OutputStreamWriter w = new OutputStreamWriter(fos, "iso-8859-1");
String s = null;
for (int i = 0; i <= 0xFFFF; i++) {
s = "" + (char) i;
w.write(i + "=" + java.net.URLEncoder.encode(s, "UTF-8"));
w.write("/r/n");
}
w.close();
fos.close();
}
}
然后用ASP查询字典来进行URLEncode(下面这段是柠檬(http://3rgb.com)帮忙写的):<%
dim arrDic
Dim objFSO,objFile,strTemplate,strFileName
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(Server.MapPath("./") & "/URLEncoding.txt", 1)
strSource = objFile.ReadAll
set objFSO = nothing
set objFile = nothing
arrDic = split(strSource, vbcrlf)
Function utfoutstr(str)
dim i,j,k,cc,dd,outStr,utfStr
j = Ubound(arrDic) - 1
for k = 1 to len(str)
cc = ascw(mid(str,k,1))
for i = 0 to j
dd = split(arrDic(i),"=")
if clng(cc) = clng(dd(0)) then
utfStr = dd(1)
exit for
end if
next
outStr = outStr & utfStr
next
utfoutstr = outStr
end function
with response
'.write Ubound(arrDic)
.write utfoutstr("周树群")
end with
%>
哦,天那,这就是我的最终代码,我发现效果不错。
哦,天那,这就是我的最终代码,我发现效果不错。不过最后我用到我的程序中发现,压根不管用。
因为编码后的东西是作为参数传给Response.Redirect的,虽然我替换了:,/,.三个符号,还是报错,我猜测是因为Response.Redirect会自己调用Server.URLEncode或者做相似的处理。
我放弃了,我不用改了。
不过我明白了一些函数,chrW,ascW之类的。
也知道了确信了,以后再也不用asp的坚定信念,妈呀,简直噩梦。
几个有用的参考:
http://www.shaoys.com/testart/ShowThesis.asp?DocID=Y2004M11D04H05m12s05
http://blog.csdn.net/daviva/archive/2004/09/21/111564.aspx
相关文章推荐
- javascript中文编码/解析与C#ASP.NET中文编码/解析 C#: Server.UrlEncode() HttpUtility.UrlEncode() javascript: escape() encodeURI() encod
- 用ASP读取/写入UTF-8编码格式的文件
- ASP生成静态文件编码为UTF-8格式的HTML文件
- ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)第1/2页
- ASP.NET - 对URL传递的值进行编码Server.UrlEncode()
- javascript中文编码/解析与C#ASP.NET中文编码/解析 C#: Server.UrlEncode() HttpUtility.UrlEncode() javascript: escape() encodeURI() encodeURICom
- ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)<
- asp.net前台使用Server.UrlEncode编码传值,绑定列
- 用ASP读取/写入文件 自定义编码格式
- 用ASP读取/写入UTF-8编码格式的文件
- ASP生成静态文件编码为UTF-8格式的HTML文件
- ASP生成静态文件编码为UTF-8格式的HTML文件
- 在ASP中自动检测文件的编码格式,支持UTF-8、GB2312、UTF-7、Unicode、Unicode Swap等格式的检测
- ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)第1/2页
- asp生成UTF-8格式的文件
- 关于ASP中按指定编码写入读取文件
- 指定存储文件的编码格式(下)
- Linux查看文件编码格式及文件编码转换
- MyEclipse中文乱码,编码格式设置,文件编码格式
- spring mvc源码-》MultipartReques类-》主要是对文件上传进行的处理,在上传文件时,编码格式为enctype="multipart/form-data"格式,以二进制形式提交数据,提交方式为post方式。