在做asp程序的时候,用了response.redirect "要下载的文件url"的方式来下载文件。但是当文件名含有中文时,用户点下载保存的时候,文件名在保存为对话框中确是乱码。
解决方法:
1、当把浏览器中的“总是通过UTF-8发送URL”去掉
这样,url将会通过操作系统的默认编码发送。而且会将url作为操作系统的默认编码进行看待。而我们的iis中文版中的字符串编码默认是GB2312(GBK)。刚好我们客户端和服务器端都是通过GB2312(GBK)编码,这时就不会乱码
这种方法不太适用。因为我们要协调好客户端和服务端
2、当我们知道ie处理这个文件名时,默认情况下,是把它作为utf-8编码处理的,而我们的url发送过来的时候是gb2312编码的,所以会出现乱码,因此,只要我们在服务端把gb2312编码转换为utf-8编码就行了。
如下代码所示:
DefaultCodePage=Session.CodePage
Session.CodePage=65001 ‘utf-8
PFileName=Server.URLEncode(PFileName) 'encode file name by utf-8
Session.CodePage=DefaultCodePage 'restore
<script language="javascript">
window.navigate("<%=PFileName%>")
</script>
注意上面代码中为什么没使用:response.redirect PFileName
这是因为redirect方法会对字符串进行编码,这样会将PFileName中的%编码为%2E这样就出错了