- 浏览: 980330 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
custjcy:
不错,赞一个。尤其是这个,在查找指定目录下,列出所有包含某个字 ...
shell命令的批量修改文件内容 -
qw173795180:
你好,请问Start这个参数怎么使用不了?
视频播放flv player的使用 -
cheeruplc:
xml进行修改之后 刷新请求 不执行 看了你的博文解决 ...
同一页面无法多次使用XmlHttp发起Ajax请求的真实原因--l转 -
dongbiying:
没有想到还有map的概念
js数组的操作及数组与字符串的相互转化 -
wangtuda:
打酱油的~
js中随机排序
通常使用以下代码就能导出为流的文件,而不是打开文件
webserver支持下载的函数:
但是,如果fileName是UTF-8编码的,比如文件名为测试.html;
ie这时就搞些小情绪,文件名变成了乱码了
在RFC2231的定义里面, 多语言编码的Content-Disposition应该这么定义:
Content-Disposition: attachment; filename*="utf8''%E6%B5%8B%E8%AF%95.html"
即:
filename后面的等号之前要加 *
filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。
所以这时应该对文件名进行url编码转换 ,使用urlencode很轻松就搞定了
因此,以上代码应该加上url编码转换
websWrite(wp, T("HTTP/1.1 200 OK\n")); websWrite(wp, T("Pragma: no-cache\n")); websWrite(wp, T("Cache-control: no-cache\n")); websWrite(wp, T("Content-Length: %ld\n"),sbufs.st_size); websWrite(wp, T("Content-Type: application/force-download\n")); websWrite(wp, T("Content-Type: application/vnd.ms-excel; charset=utf-8\n")); // websWrite(wp, T("Content-type: application/octet-stream\n")); websWrite(wp, T("Content-Transfer-Encoding: binary\r\n")); websWrite(wp, T("Content-Disposition: attachment; filename=\"%s\"\n\n"),pname);
webserver支持下载的函数:
/** * @brief URLEncode 对字符串URL编码 * * @param str 原字符串 * @param strSize 原字符串长度(不包括最后的\0) * @param result 结果缓冲区的地址 * @param resultSize 结果缓冲区的大小(包括最后的\0) * * @return: >0:resultstring 里实际有效的长度 * 0: 解码失败. */ int URLEncode(const char* str, const int strSize, char* result, const int resultSize) { int i; int j = 0;//for result index char ch; if ((str==NULL) || (result==NULL) || (strSize<=0) || (resultSize<=0)) { return 0; } for ( i=0; (i<strSize)&&(j<resultSize); ++i) { ch = str[i]; if (((ch>='A') && (ch<'Z')) || ((ch>='a') && (ch<'z')) || ((ch>='0') && (ch<'9'))) { result[j++] = ch; } else if (ch == ' ') { result[j++] = '+'; } else if (ch == '.' || ch == '-' || ch == '_' || ch == '*') { result[j++] = ch; } else { if (j+3 < resultSize) { sprintf(result+j, "%%%02X", (unsigned char)ch); j += 3; } else { return 0; } } } result[j] = '\0'; return j; } #define BUFFER_SIZE 2048 static void downloadFiles(webs_t wp, char_t *path, char_t *query) { char _filePath[1024]={0},encodFilename[1024]={0}; char *fileName,*file_path,*browser,*pname; unsigned char data[BUFFER_SIZE]={0}; char err_msg[256]; long count; struct stat sbufs; FILE *src; fileName = websGetVar(wp, T("downFileName"), T("")); file_path = websGetVar(wp, T("download_path"), T("")); browser = websGetVar(wp, T("browserType"), T("")); //浏览器类型 sprintf(_filePath,"/media%s",file_path); memset(&sbufs,0,sizeof(sbufs)); src = fopen(_filePath, "r"); if (!src) { websWrite(wp, T("HTTP/1.1 200 OK\nContent-type: text/plain\nPragma: no-cache\nCache-Control: no-cache\n\n")); sprintf (err_msg, "Can't fopen %s: %s\n", _filePath, strerror(errno)); websWrite(wp,T("%s"),err_msg); websDone(wp, 200); goto error; } if(!strcmp(browser,"IE")){ URLEncode(fileName, strlen(fileName), encodFilename, sizeof(encodFilename)); pname=encodFilename; }else{ pname=fileName; } stat(_filePath, &sbufs); websWrite(wp, T("HTTP/1.1 200 OK\n")); websWrite(wp, T("Pragma: no-cache\n")); websWrite(wp, T("Cache-control: no-cache\n")); websWrite(wp, T("Content-Length: %ld\n"),sbufs.st_size); websWrite(wp, T("Content-Type: application/force-download\n")); websWrite(wp, T("Content-Type: application/vnd.ms-excel; charset=utf-8\n")); // websWrite(wp, T("Content-type: application/octet-stream\n")); websWrite(wp, T("Content-Transfer-Encoding: binary\r\n")); websWrite(wp, T("Content-Disposition: attachment; filename=\"%s\"\n\n"),pname); while ((count = fread(data, 1, BUFFER_SIZE, src)) > 0) { websWriteBlock(wp, data, count); } fclose(src); error: return; //websDone(wp, 200); }
但是,如果fileName是UTF-8编码的,比如文件名为测试.html;
ie这时就搞些小情绪,文件名变成了乱码了
在RFC2231的定义里面, 多语言编码的Content-Disposition应该这么定义:
Content-Disposition: attachment; filename*="utf8''%E6%B5%8B%E8%AF%95.html"
即:
filename后面的等号之前要加 *
filename的值用单引号分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。
所以这时应该对文件名进行url编码转换 ,使用urlencode很轻松就搞定了
因此,以上代码应该加上url编码转换
发表评论
-
防火墙实现URL过滤原理
2014-05-08 18:45 4330对于URL过滤:1.HTTP URL过滤 2.https UR ... -
C实现urlencode&urldecode
2013-12-28 16:20 6003static unsigned char char_to_he ... -
c语言实现urlencode
2013-12-28 16:19 2043#include <stdio.h> #inc ... -
wifidog+authpuppy认证页面的配置
2013-10-29 02:15 3448转自:http://blog.sina.com.cn/s/ ... -
atoi() & itoa()&atol()<oa()函数的实现
2013-05-01 13:53 3064#include "stdio.h" ... -
详解sigaction --转
2013-04-20 03:31 11369详解sigaction 这是挺好理解的,就好比在系 ... -
Linux定时器的使用 --转
2013-04-20 01:13 1455使用定时器的目的无非是为了周期性的执行某一任务,或者是到了 ... -
Linux C 函数参考(日期时间) --转
2013-04-20 00:03 11448Linux C 函数参考(日期时间) 1.1 概述 世 ... -
对(*(volatile unsigned long *)) 的理解
2013-03-20 15:10 1537对(*(volatile unsign ... -
Linux内核模块概述 --转
2013-01-08 10:43 2447Linux内核模块概述 . Linux 内 ... -
linux上搭建pppoe-server
2012-12-28 15:53 8881记录下过程,主要还是参 ... -
Ubuntu上架设PPPoE Server--转
2012-12-28 01:25 7526一。安裝 PPPoE Server Software ... -
移植rp-pppoe到s3c2440实现ADSL拨号上网--转
2012-12-28 01:22 3250一:总的来说可以分 ... -
Linux下C语言实现文件拷贝--转
2012-11-01 23:11 14008Linux下C语言实现文件拷贝 /* Func ... -
linux操作系统的DNS客户端配置
2012-09-16 16:52 11370基于linux操作系统的DNS客户端配置: Linux ... -
/etc/hosts配置文件解析
2012-06-20 14:46 2543/etc/hosts配置文件解析 这个文件可以配置主机ip及 ... -
移殖net-snmp和应用net-snmp开发详解 -转
2012-06-08 17:46 3570移殖net-snmp和应用net-snmp开发详解 @ ... -
strtok 和strtok_r 的使用
2012-06-01 17:13 106661. strtok介绍众所周知,strtok可以根据用户所提供 ... -
关于LINUX C中函数strtok使用要点
2012-06-01 15:45 2259strtok函数的使用是一个老生常谈的问题了。该函数的作用很大 ... -
基于SNMP网络管理系统的设计与实现
2012-05-25 15:54 930原文链接:http://www.docin.com/p-265 ...
相关推荐
在PHP中实现文件下载功能,并确保在不同浏览器尤其是Internet Explorer (IE) 中处理中文文件名不出现乱码问题,是一项常见的Web开发任务。从提供的文件信息中,我们可以提炼出关于实现文件下载以及如何处理IE下中文...
如果已经存在的 JSP 文件中出现了中文显示问号问题,可以通过修改 JSP 文件的编码方式来解决问题。具体步骤如下: 1. 打开 JSP 文件,添加以下代码:; charset=GB18030" pageEncoding="GB18030"%> 2. 将各种编码...
在IT行业中,尤其是在Web开发领域,中文乱码问题是一个常见的挑战,特别是在涉及到GET请求和不同浏览器的兼容性时。本文将深入探讨“Get中文乱码”以及如何在IE浏览器上解决这个问题。 首先,让我们理解为什么会...
3.IIS7用户如果出现Handler不能使用问题,请手动修改web.config中 <system.webServer>节点下的,为每个子节点添加 preCondition="integratedMode" 属性 已有的不需要添加该属性 4.重启IIS SDK版用户: 1.用...
本文选用的数据库为Oracle 9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如MySQL,SQLServer等。 总体实现 上传文件保存到T_FILE表中,T_FILE表结构...
在IT行业中,Web开发是一项关键任务,而JSP(JavaServer Pages)作为一种强大的服务器端脚本语言,常常被用于创建动态网页。EXT Grid是EXT JS库中的一个组件,它提供了丰富的数据展示和交互功能,广泛应用于数据管理...
为了解决这一问题,可以考虑绕过DNS查询,直接在`winnt\system32\drivers\etc\hosts`或`windowshosts`文件中添加IP地址与主机名的映射记录,从而加速RMI的远程调用过程,提高应用的响应速度和可靠性。 #### 八、...
10. VFP(Visual FoxPro)中的表单文件扩展名为.SCX。 11. 控件的Enabled属性设置为False,可以防止用户与其交互。 12. 电子邮件的乱码通常是由于编码不统一导致的,比如发送方和接收方的字符编码不匹配。 13. ...
DTD文件也是一个ASCII的文本文件,后缀名为.dtd。例如:myfile.dtd。 为什么要用DTD文件呢?我的理解是它满足了网络共享和数据交互,使用DTD最大的好处在于DTD文件的共享。(就是上文DTD说明语句中的PUBLIC属性)。...
本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向...
本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用PHP进行Web开发的各个方面的知识和技巧,主要包括开发环境、PHP基础、Web页面交互、文件操作、会话应用、图形图像处理及面向...
经过这样的修改,无论在IE、360还是Firefox等浏览器中,只要请求的URL发生变化(通过添加时间戳),浏览器都会重新向服务器发起请求,解决了缓存问题。 #### 中文问题解析 在使用Ajax进行数据交互时,经常会出现...
- **Response乱码解决**: - 点击“Response body is encoded. Click to decode.”来解压缩。 - 使用工具栏中的“Decode”按钮自动解压缩。 - **HTTPS请求监听**: - 在`Tools > Fiddler Options > HTTPS`选项卡中...
112 <br>0188 如何在ASP.NET中显示当前IE浏览器头信息 113 <br>5.6 其他应用技巧 114 <br>0189 如何判断年份是否为闰年 114 <br>0190 如何根据年份判断十二生肖 114 <br>0191 如何根据IP...
1. 通过putty安装系统:在安装CM6时,推荐使用putty而非Windows自带的telnet,因为putty可以避免出现乱码问题。在设置putty时,需将translation选项的字符集设为UTF-8,并连接到S8300或S8800的服务端口(S8800通常是...