日期:2014-05-18  浏览次数:21815 次

Ionic.Zip 中打包下载后的中文文件名出现乱码问题
求救,很急。。。最近做个项目,需要从打包下载文件到客户端。。。可是下载下来的文件中有如果是中文命名的就会出现????的字样,

我的源代码:
 
C# code
  
        Teacher tea = (Teacher)Session["teacher"];
        string a = tea.teach_id;
        string filepath = Server.MapPath("~/");
        //Directory.CreateDirectory(filepath+"download");
        ZipFile zip = new ZipFile(filepath+"download.zip");
        //zip.AddDirectory(filepath+"download");
        
        for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
        {
            CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
         
            if (cbox.Checked == true)
            {
                 SQL mysql = new SQL();
                 string str = "select * from StuCourseFile where teach_id = '" + a + "'";
                 DataTable table = mysql.mytable(str);
                 string FilePath = table.Rows[i]["StuFilePath"].ToString();
                 string FileName = table.Rows[i]["StuFileName"].ToString();
               
                 zip.AddFile(FilePath+FileName,"");
                
            }
                 
        }
        Response.Clear();
        Response.ContentType = "application/zip";
        Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("reportdownload.zip", System.Text.Encoding.UTF8));
        zip.Save(Response.OutputStream);
        Response.End();
        


------解决方案--------------------
改下 System.Text.Encoding.UTF8这个看看
C# code
/// <summary>
        /// 压缩方法
        /// </summary>
        /// <param name="patch">预压缩的路径</param>
        /// <param name="rarPatch">压缩后的路径</param>
        /// <param name="rarName">压缩文件名</param>
        public static void RARsave(string patch, string rarPatch, string rarName)
        {
            String the_rar;
            RegistryKey the_Reg;
            Object the_Obj;
            String the_Info;
            ProcessStartInfo the_StartInfo;
            Process the_Process;
            try
            {
                the_Reg = Registry.ClassesRoot.OpenSubKey(@"Applications\\WinRAR.exe\\Shell\\Open\\Command");
                the_Obj = the_Reg.GetValue("");
                the_rar = the_Obj.ToString();
                the_Reg.Close();
                the_rar = the_rar.Substring(1, the_rar.Length - 7);
                Directory.CreateDirectory(patch);
                //命令参数

                //the_Info = " a " + rarName + " " + @"C:Test?70821.txt"; //文件压缩

                the_Info = " a " + rarName + " " + patch + " -r"; ;
                the_StartInfo = new ProcessStartInfo();
                the_StartInfo.FileName = the_rar;
                the_StartInfo.Arguments = the_Info;
                the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                //打包文件存放目录

                the_StartInfo.WorkingDirectory = rarPatch;
                the_Process = new Process();
                the_Process.StartInfo = the_StartInfo;
                the_Process.Start();
                the_Process.WaitForExit();
                the_Process.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        ///解 压缩方法
        /// </summary>
        /// <param name="patch">预解压缩的路径</param>
        /// <param name="rarPatch">解压缩后的路径</param>

       public static int unRAR(string unRarPatch, string rarPatch)
      {