项目中使用ICSharpCode.SharpZipLib.Zip库进行解压,之前自动更新程序是.NET 4.5的,升级到.NET 8后,发现解压升级包里面的中文文件名是乱码了,经过一番摸索,增加一句代码可以解决乱码问题:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
cs
public static bool DeCompressionZip(string _depositPath, string _floderPath)
{
if (!Directory.Exists(_floderPath))
{
Directory.CreateDirectory(_floderPath);
}
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);// 解决文件名中文乱码
using (ZipInputStream s = new ZipInputStream(File.OpenRead(_depositPath)))
{
ZipEntry ze;
while ((ze = s.GetNextEntry()) != null) //如果解压完ze则是null
{
if (ze.IsFile)//压缩zipINputStream里面存的都是文件。带文件夹的文件名字是文件夹\\文件名
{
string zeName = ze.Name;
string directoryName = Path.GetDirectoryName(zeName);
// create directory
if (!string.IsNullOrEmpty(directoryName) && directoryName.Length > 0)
{
directoryName = Path.Combine(_floderPath, directoryName);
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
}
string fileName = Path.GetFileName(zeName);
if (!string.IsNullOrEmpty(fileName))
{
using (FileStream streamWriter = File.OpenWrite(Path.Combine(_floderPath, zeName)))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size <= 0)
{
break;
}
streamWriter.Write(data, 0, size);
}
}
}
}
}
}
return true;
}