求救,很急。。。最近做个项目,需要从打包下载文件到客户端。。。可是下载下来的文件中有如果是中文命名的就会出现????的字样,
我的源代码:
- 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) { try { System.Diagnostics.Process Process1 = new System.Diagnostics.Process(); Process1.StartInfo.FileName = "Winrar.exe"; Process1.StartInfo.CreateNoWindow = true; Process1.StartInfo.Arguments = " e " + unRarPatch + " " + rarPatch + " -y"; Process1.Start(); Process1.WaitForExit(); if (Process1.HasExited) { return Process1.ExitCode; } return -1000; } catch (Exception ex) { return -1001; } }