2015-04-15 40 views
1

我正在使用C#/ Asp.Net進行下載的項目,並且文件中可能包含中文字符。下載單個文件時,中文文件名顯示正確。但是,在ZipFile下載多個文件時,文件夾內的文件將顯示中文字符爲????____。我如何使ZipFile保持文件名的非ASCII字符完整?ZipFile混淆了中文字符

這裏的多文件下載代碼:

using (ZipFile zip = new ZipFile()) 
{ 
     // fileList is of type List<string>            
     zip.AddFiles(fileList, "files"); 

     Response.Clear(); 
     Response.ClearHeaders(); 
     Response.ContentType = "application/zip"; 
     Response.AppendHeader("content-disposition", "filename=file.zip"); 
     zip.Save(Response.OutputStream); 
     Response.End(); 
    } 

以及下載一個文件的代碼:

if (File.Exists(Path)) 
{ 
    FileInfo fileInfo = new FileInfo(Path); 

    Response.Clear(); 
    Response.ClearHeaders(); 
    Response.ContentType = "application/x-download"; 
    Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); 

    Response.TransmitFile(fileInfo.FullName); 
    Response.End(); 

    File.Delete(Path); 
} 

回答

3

試試這個:

using (ZipFile zip = new ZipFile()) 
{ 
    zip.ProvisionalAlternateEncoding = System.Text.Encoding.UTF8; 
    zip.AddFiles(fileList, "files"); 

它是怎麼一回事,因爲DotNetZip使用IBM437(編碼)作爲默認值,所以你應該設置合適的編碼,如Encoding.UTF8。

+0

我覺得這個'Encoding.UTF8'有錯誤,對吧? – JCChan

+0

@JCChan,錯誤是什麼? –

+0

我編輯了一下這個'zip.ProvisionalAlternateEncoding = System.Text.Encoding.UTF8;',那麼一切都工作正常now.Thanks,兄弟! – JCChan