今天调个下载程序。当下载的URL中含有中文时候,无法下载,比如:
http://www.huachu.com.cn/itbook/booklist.asp?tsmc=汇编
我就用 .net 中的 Server.UrlEncode 函数进行转换。但是这样仍然不行。试验了很久也没有找到原因。后来怀疑 ASP.net中的Server.UrlEncode函数和ASP中的Server.URLEncode函数返回的值竟然不一样。一实验。竟然确实是。
试验代码:
ASP.net 中 如下代码? Response.Write(Server.UrlEncode("汇编")); ?返回: %e6%b1%87%e7%bc%96
ASP 中 如下代码 Response.Write Server.URLEncode("汇编")?? 返回: %BB%E3%B1%E0
产生这个问题的原因:ASP.net 中的 Server.UrlEncode 默认是按照 UTF-8 编码方式进行处理的。而ASP中是按照本地设置编码方式进行处理的。
如果你在 ASP.net 下采用如下的编码: ASP 和 ASP.net 的结果就会一样:
Response.Write(HttpUtility.UrlEncode("汇编",Encoding.Default));
采用:Response.Write(HttpUtility.UrlEncode("汇编",Encoding.UTF8));? 返回的就是 Response.Write(Server.UrlEncode("汇编"));?? 返回的结果。
?
2003年10月3日 12:29
打印 | 张贴于 2003-10-20 15:05:00 | Tag:.net 编程心得
留言反馈
1. 在asp 中 username=server.urlEncode( server.URLpathencode(“测试”) )
2。在php中 username=urlencode(rawurlencode((“测试”) ));
然后在asp.net 获取并解码的方法是
strUsername = HttpUtility.UrlDecode(this.GetQueryStr("username"), System.Text.Encoding.GetEncoding("gb2312"));
这种方法是正确的,本人测试成功
只能自定义函数了!
<%
function urldecoding(vstrin)
dim i,strreturn,strSpecial
strSpecial = "!""#$%&'()*+,./:;<=>?@[\]^`{|}~%"
strreturn = ""
for i = 1 to len(vstrin)
thischr = mid(vstrin,i,1)
if thischr="%" then
intasc=eval("&h"+mid(vstrin,i+1,2))
if instr(strSpecial,chr(intasc))>0 then
strreturn= strreturn & chr(intasc)
i=i+2
else
intasc=eval("&h"+mid(vstrin,i+1,2)+mid(vstrin,i+4,2))
strreturn= strreturn & chr(intasc)
i=i+5
end if
else
if thischr="+" then
strreturn= strreturn & " "
else
strreturn= strreturn & thischr
end if
end if
next
urldecoding = strreturn
end function
%>
<%=urldecoding(server.urlencode("中草药"))%>
来编码要上传的文件名,上传成功了,但在演示下载的时候缺不能下载,而且我查看了文件夹的名字和网页中下载的地址是一样的,为什么下载不了呢?
可以把asp 和 php 的中文通过传递到 asp.net 接受。
1. 在asp 中 username=server.urlEncode( server.URLpathencode(“测试”) )
2。在php中 username=urlencode(rawurlencode((“测试”) ));
然后在asp.net 获取并解码的方法是
strUsername = HttpUtility.UrlDecode(this.GetQueryStr("username"), System.Text.Encoding.GetEncoding("gb2312"));
contact my msn if any qestion:
zhaoxianfengdefensi@hotmail.com
Session.CodePage=65001
Then whole page is processed as UTF-8
比如:Server.UrlEncode("*")编码后不变。
早期MS认为默认编码是本地的, 网络化的趋势使得utf8比较容易处理.所以就成现在这样了
我的网站编码也是使用的 gb2312,我试过改成 utf-8后,google是正确了,而百度则又出现了错误。
在 asp中 ,用 server.URLEncode 处理过的字符串如何还原?
先谢!
lglwy@163.com