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:
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?