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

来源:互联网 发布:数据统计有什么用 编辑:程序博客网 时间:2024/05/17 08:24

经测试,在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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 扣扣号有密码无法加好友怎么办 扣扣帐号忘记了怎么办 扣扣帐号被冻结怎么办 xp忘了开机密码怎么办 手机怎样知道好友qq密码怎么办 找回微信密码申诉失败怎么办 若微信号被盗钱怎么办 微信号被倒了怎么办 微信支付密码忘了怎么办 微信钱包密码忘了怎么办 忘记qq锁屏密码怎么办 微信里保密柜密码忘记了怎么办 qq漫游记录密码忘了怎么办 当你很烦的时候怎么办 当你烦的时候怎么办 面对刁蛮不讲理的老婆怎么办 老是想以前的事怎么办 被心机婊陷害了怎么办 分手了还被骚扰怎么办 苹果手机屏幕出现冷暖屏怎么办 我感觉媳妇不漂亮怎么办 90后赚不到钱怎么办 处对象感觉好累怎么办 谈朋友感觉好累怎么办 家庭条件不好娶老婆难办怎么办? 异地恋闹矛盾了怎么办 有人威胁要杀我全家怎么办 分手了借我的钱怎么办 脸打架打肿了怎么办 人家不加我qq好友怎么办 一个好友被删了怎么办 dnf脸黑怎么办还有办法 我想登别人微信怎么办 昌硕工资没到怎么办 昌硕离职不批怎么办 昌硕工资不到卡怎么办 上海人去苏州工作社保怎么办 娶个个脾气暴躁的媳妇怎么办 满脸的黑头痘痘怎么办 脚底磨起泡不敢走路怎么办 老婆老是找异性朋友怎么办