首页 新闻 赞助 找找看

response.writefile文件名长度限制问题

0
悬赏园豆:20 [已关闭问题]

response.writefile还有一个问题 就是 当下载文件名中文长度超过16个汉字
他会自动截断 不显示所有汉字

我去QQ邮箱测了下,他们的附件下载文件名就不受限制 不知道怎么做到的?

friendlinzh的主页 friendlinzh | 初学一级 | 园豆:40
提问于:2008-09-18 15:50
< >
分享
其他回答(1)
0

以下摘自http://topic.csdn.net/t/20060414/19/4687886.html:

        我通过在HttpHeaders里加"Content   attachment;filename=文件名"这种方式来显示文件名. 这样用户打开是就会显示一个包含下载文件名的对话框.保存时也会按这个文件名进行保存.  
       我使用了UrlPathEncode来进行编码,这样一个中文就被编码成了9个字节,如:"中"   被编码为   "%e4%b8%ad".  
       返回到客户端的应该是这种样式:  
   
  Content-Disposition:   attachment;filename="%e4%b8%ad%e5%9b%bd%e7%bd%91%e9%80%9a%e5%85%b3%e4%ba%8e%e8%b0%83%e6%95%b4%e9%83%a8%e5%88%86%e7%94%b5%e4%bf%a1%e4%b8%9a%e5%8a%a1%e8%b5%84.doc"  
   
      问题是filename的长度限制是150个byte.见:http://support.microsoft.com/default.aspx?kbid=816868,所以当文件名被编码以后的长度大于150时.文件名被从前面截掉了一部分. 最多只能显示15个汉字再加扩展名(4byte).  


      根据引文的论述,或许可用 gb2312等编码解决问题(或许,不是绝对),但我想你最好不要这样,弄不好会有其他副作用问题。

      首先,你的长中文表达是否非常必要,如果可以,压缩显示,但在文件内部标明类型、用处等(替代长文件名称策略)。

      其次,这个局限大概是底层协议造成的,你如果强制要突破,那几乎是不可能的:),因此你只有上一条路可走(我还是不推荐改变编码的策略)。

陛下 | 园豆:3938 (老鸟四级) | 2008-09-19 17:21
0

163也是可以长名保存,GOOGLE反而不行

zjy | 园豆:3194 (老鸟四级) | 2008-09-24 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册