2016-03-02 15 views
5

Chúng tôi sử dụng ASP.NET lõi và có mã này:Sau khi nén thư mục tất cả các mục zip thay đổi mã hóa

public static void Compress(string sourceDirectoryName, string destinationArchiveFileName) 
{ 
    var directoryName = Path.GetFileName(sourceDirectoryName); 
    var remotePath = sourceDirectoryName.Split(new[] { directoryName }, StringSplitOptions.RemoveEmptyEntries).First(); 

    using (var zipStream = new MemoryStream()) 
    { 
     using (var zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true, Encoding.UTF8)) 
     { 
      zip.CreateEntry(string.Concat(directoryName, directorySlash)); 

      foreach (var path in Directory.EnumerateFileSystemEntries(sourceDirectoryName, "*", SearchOption.AllDirectories)) 
      { 
       if (!Directory.Exists(path)) 
        zip.CreateEntryFromFile(path, path.RemoveSubString(remotePath).ReplacePathSeparatorOnSlash()); 
       else 
        zip.CreateEntry(string.Concat(path.RemoveSubString(remotePath).ReplacePathSeparatorOnSlash(), directorySlash)); 
      } 
     } 

     using (var outputZip = new FileStream(destinationArchiveFileName, FileMode.Create)) 
     { 
      zipStream.Seek(0, SeekOrigin.Begin); 
      zipStream.CopyTo(outputZip); 
     } 
    } 
} 

Sau khi nén sourceDirectoryName có chứa ký tự Nga nếu chúng ta mở kho lưu trữ này với windows explorer, chúng ta thấy như sau:

enter image description here và nơi tên được đánh dấu bằng màu xanh lá cây là chính xác và tên được đánh dấu bằng màu đỏ có mã hóa tên đã thay đổi.

Nếu chúng ta sử dụng đoạn mã sau:

ZipFile.CreateFromDirectory(sourceDirectoryName, destinationArchiveFileName); 

Chúng tôi có cùng một vấn đề. Cách khắc phục sự cố này?

Trả lời

2

Tôi đã tìm thấy câu trả lời. Tôi phải sử dụng mã hóa 866:

using (var zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true, Encoding.GetEncoding(866))) 
{ 
    ... 
} 
Các vấn đề liên quan