asp中UTF-8编码和中文文件下载的问题
这是自己很久以前写的,发在这里保存下。
大家一般都知道设置 Response.Charset="utf-8"来确保浏览器可以正确解释页面内容,使用<%@ CODEPAGE=65001 %>来保证页面源码自身编码的正确性,但是很多人会忘记session.codepage属性.
session.codepage是用来确保动态内容的输出编码的.例如可以控制response.write输出的字符串编码.如果不设置session.codepageasp引擎一般设置为asp源码的编码格式而不是response.Charset中指定的编码.
例子: asp代码用utf-8格式保存,页面中设置了正确的codepage 和 response.Charset, 此时使用response.write输出一串中文,浏览器可以正确按照utf-8编码显示.在response.write语句之前设置session.codepage=936,再次刷新页面则浏览器显示乱码,强制浏览器按照gb2312编码显示则正确.
上面说了这么多,下面谈谈session.codepage的一个用途.
现在的文件下载一般不直接提供真是的url地址,而是使用组件write,例如adostream之类的.此时要设置content-type为 application/octet-stream之类,同时设置Header:Content-Disposition为 attachment;filename=youfilename.txt;来确保浏览器弹出下载对话框而不是直接显示.
这里有一个问题:IE6有一个bug,就是不能正确处理attachment;filename中的filename编码,IE使用操作系统默认编码来处 理.中文windows的默认编码为gbk,所以如果asp页面输出使用gb2312格式则不会出错,如果使用utf-8格式输出的话则会100%的乱 码.
此时session.codepage派上用场了.
参考如下代码:
session.CodePage = 936 '设置为gb2312编码输出
Response.AddHeader "Content-Disposition", "attachment;filename=" & fn
Response.AddHeader "Content-Type", "application/octet-stream"
session.CodePage = 65001 '恢复为utf-8编码输出
这样在返回的header中filename被强制编码为gb2312编码, IE就可以正确的处理了.
btw:据说IE6的某个版本还有个bug就是不能处理长度超过150个字节的filename,我没有遇到过,可能我补丁打的比较勤吧.Firefox在处理attachment;filename=的时候默认用utf-8来解码,但是像上面那样用gb2312他也能正确识别出来..真是神奇 :)
不知道IE7在这个方面是不是有所改观呢.
转载于:https://www.cnblogs.com/xwing/archive/2008/10/07/1305235.html
- 点赞
- 收藏
- 分享
- 文章举报
- asp中UTF-8编码和中文文件下载的问题
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
- sharepoint 中用自带的download.aspx实现文件的下载,中文文件名编码的问题
- [完]PHP文件下载 下载GET值中含有中文字符的文件,保存中文文件名,文件不能打开,遇到的编码问题
- struts2文件上传下载(含中文编码问题)
- python 处理中文文件时的编码问题,尤其是utf-8和gbk
- 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- 关于通过网站下载中文名称的文件的编码问题
- [asp.net]解决下载文件--中文名乱码问题
- jsp+mysql文件上传下载方法比较(解决中文编码问题)
- 【转】彻底解决Asp.net文件下载(Response.WriteFile)时文件名的中文乱码和空格异常问题
- struts2文件上传下载(含中文编码问题)
- dom4j写文件的编码(UTF-8)问题(主要指中文)的解决
- [Python爬虫] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- 如何解决ASP.NET下载时的中文文件名乱码,与TXT文件中存在代码两个问题
- http下载文件,中文文件名在firefox下编码问题
- 关于android在TOMCAT服务器下载文件名带中文的文件的编码问题
- 下载文件时的中文文件名问题(asp.net)
- 中文编码问题(utf-8转为中文)