c#后台 压缩文件后解压出来的文件中的文件名是乱码 该如何解决

不同世界 2016-05-04 11:51:52
这是压缩的代码
ZipOutputStream s = new ZipOutputStream(File.Create(name));

Crc32 crc = new Crc32();
//压缩级别
s.SetLevel(Level); // 0 - store only to 9 - means best compression
try
{
int m = 0;
foreach (string file in filenames)
{
//打开压缩文件
FileStream fs = File.OpenRead(file);//文件地址
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
//建立压缩实体
ZipEntry entry = new ZipEntry(fileName[m].ToString());//原文件名
//时间
entry.DateTime = DateTime.Now;
//空间大小
entry.Size = fs.Length;
fs.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
s.PutNextEntry(entry);
s.Write(buffer, 0, buffer.Length);
m++;
}
}
catch
{
throw;
}
finally
{
s.Finish();
s.Close();
}
...全文
1416 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
不同世界 2016-05-05
  • 打赏
  • 举报
回复
引用 5 楼 cancerser 的回复:
s.setEncoding("UTF-8"); 看看有这种方法没,你得自己看看相关文档 或则charSet啥的
我在项目中别的文件夹中找到ICSharpCode.SharpZipLib.dll的高版本,更换之后问题已经解决了 感谢您的耐心解答。
不同世界 2016-05-04
  • 打赏
  • 举报
回复
引用 5 楼 cancerser 的回复:
s.setEncoding("UTF-8"); 看看有这种方法没,你得自己看看相关文档 或则charSet啥的
没有这个 setEncoding() 方法 暂时还没找到解决办法
cancerser 2016-05-04
  • 打赏
  • 举报
回复
s.setEncoding("UTF-8");
看看有这种方法没,你得自己看看相关文档
或则charSet啥的
不同世界 2016-05-04
  • 打赏
  • 举报
回复
引用 3 楼 cancerser 的回复:
别打开看,解出来看看。
关于dll 你得查看相关文档
new ZipOutputStream(File.Create(name),StandardCharsets.UTF_8);
大概这样


解压出来是带横线的,你说的那个StandardCharsets.UTF_8 我这不存在

using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using System;
using System.IO;

namespace ICSharpCode.SharpZipLib.Zip
{
public class ZipOutputStream : DeflaterOutputStream
{
public const int DEFLATED = 8;
public const int STORED = 0;

public ZipOutputStream(Stream baseOutputStream);

public void CloseEntry();
public override void Finish();
public void PutNextEntry(ZipEntry entry);
public void SetComment(string comment);
public void SetLevel(int level);
public void SetMethod(int method);
public override void Write(byte[] b, int off, int len);
}
}
你看看是要添加什么吗
cancerser 2016-05-04
  • 打赏
  • 举报
回复
别打开看,解出来看看。
关于dll 你得查看相关文档
new ZipOutputStream(File.Create(name),StandardCharsets.UTF_8);
大概这样

不同世界 2016-05-04
  • 打赏
  • 举报
回复
引用 1 楼 cancerser 的回复:
这种情况很常见
就是压缩时文件命名的编码不一样,你应该使用其他的解压软件解压的吧?
你查一下你使用的压缩dll如何指定编码就可以了,一般utf-8都不会乱码或则GBK啥的
正常情况下,你用7z winrar 好压不同的压缩软件解,肯定有一个不乱码的

还有一种情况就是你压缩和解压的PC不是一种语言系统,这样你解压的时候就要修改解压软件的语言设置,当然如果用utf-8通常都没问题



我换了解压软件也是有问题的,应该是你说的我使用的压缩dll问题,再问一下我该如何找到呢
cancerser 2016-05-04
  • 打赏
  • 举报
回复
这种情况很常见
就是压缩时文件命名的编码不一样,你应该使用其他的解压软件解压的吧?
你查一下你使用的压缩dll如何指定编码就可以了,一般utf-8都不会乱码或则GBK啥的
正常情况下,你用7z winrar 好压不同的压缩软件解,肯定有一个不乱码的

还有一种情况就是你压缩和解压的PC不是一种语言系统,这样你解压的时候就要修改解压软件的语言设置,当然如果用utf-8通常都没问题

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧