以下摘自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等编码解决问题(或许,不是绝对),但我想你最好不要这样,弄不好会有其他副作用问题。
首先,你的长中文表达是否非常必要,如果可以,压缩显示,但在文件内部标明类型、用处等(替代长文件名称策略)。
其次,这个局限大概是底层协议造成的,你如果强制要突破,那几乎是不可能的:),因此你只有上一条路可走(我还是不推荐改变编码的策略)。
163也是可以长名保存,GOOGLE反而不行