关于asp.net中文文件名超长的下载问题

经测试,在header中的filename 中文只能18个,英文165个
按中文一个在UTF8里是9个字节( System.Text.UnicodeEncoding.UTF8.GetByteCount()方法获取每个中文为3个字符),应该是18*9=162<165)
因此在长中文文件名下载时做以下处理:
当文件名GetByteCount大于57时(没有判断中英文混合的情况)则截取文件名
        Dim FullFileName As String = Server.MapPath("qbuttom3.aspx/../../") & "temp/" & FileName
        If System.IO.File.Exists(FullFileName) = True Then
            Dim strLenth As Integer = System.Text.UnicodeEncoding.UTF8.GetByteCount(ModName)
                If strLenth > 57 Then
                    ModName = ModName.Substring(0, 17) + "_.xls"
                End If
            Response.Clear()
            Response.ContentType = "application/vnd.ms_excel"
            Response.AppendHeader("Content-Disposition", "attachment; filename=" & Server.UrlEncode(ModName))
            Response.Flush()
            Response.WriteFile(FullFileName)
        End If
注:
许多情况下当程序采用了Server.HTMLEncode 和 Server.URLEncode 先对中文进行过编码以后,系统依然显示乱码,根据微软的解释,这种情况跟IIS有关,微软提供的原因是未打Pack3的IIS 假定每个字符两个字节,而某些 UTF8 字符使用三个字节。这样,所创建的缓冲区太小,无法容纳这些字节,导致产生乱码,解决方法就是给IIS打Pack3
下载地址如下
 :
立即下载 Q249831_w2k_sp3_x86_EN.exe

中文(简体):
立即下载 Q249831_w2k_sp3_x86_CN.exe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值