我使用以下代码用C#创建一个zip存档。
using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Create, false))
{
var zipEntry = zipArchive.CreateEntry(name + ".pdf");
...
}
这个名字通常由瑞典字符组成,例如ÅÄÖåäö。当我打开拉链并查看名称时,瑞典字符会出现乱码,如“Fl +Âdesm+ñtare.pdf”。
我尝试使用此代码修复名称编码。但它没有用。
var iso = Encoding.GetEncoding("ISO-8859-1");
var utf8 = Encoding.UTF8;
var utfBytes = utf8.GetBytes(name);
var isoBytes = Encoding.Convert(utf8, iso, utfBytes);
var isoName = iso.GetString(isoBytes);
有什么想法吗?
答案 0 :(得分:3)
由于DotNetZip是一个死的项目,本文与谷歌搜索相关,这里是IO.Compression库的替代解决方案:
Archive = New IO.Compression.ZipArchive(Stream, ZipArchiveMode, LeaveOpen, Text.Encoding.GetEncoding(Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage))
这可能无法涵盖所有转换,从我从主题来源收集的内容,底层代码使用本地计算机(服务器)区域文化的条目名称编码页面。使用该编码显式映射它们已经修复了我的客户端域的问题,但不能保证它是一颗银弹。
答案 1 :(得分:2)
您可以试用DotNetZip库(通过NuGet获取)。这是一个代码示例,我使用cp866编码:
private string GenerateZipFile(string filename, BetPool betPool)
{
using (var zip = new ZipFile(Encoding.GetEncoding("cp866")))
{
//zip.Password = AppConfigHelper.Key + DateTime.Now.Date.ToString("ddMMyy");
zip.AlternateEncoding = Encoding.GetEncoding("cp866");
zip.AlternateEncodingUsage = ZipOption.AsNecessary;
zip.AddFile(filename, "");
var zipFilename = FormZipFileName(betPool);
zip.Save(zipFilename);
return zipFilename;
}
}
答案 2 :(得分:0)
使用(var zip = new ZipArchive(ZipFilePath,ZipArchiveMode.Read,false,Encoding.GetEncoding(“ cp866”)))