[bug]使用SharpZipLib遇到中文名称乱码问题

本文介绍了一种解决在使用Zip压缩时遇到的中文乱码问题的方法。通过设置ZipEntry对象的IsUnicodeText属性为true,确保了中文文件名能够正确地被压缩并保留原始字符集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

业务逻辑是这样的,需要导出一个app的话题,并需要把该话题下帖子的附件导出,然后需求想修改成人员的名称.jpg的格式。所以就出现了中文乱码的问题。在本地没问题,但发布到服务器上面就出问题,每次打包下载下面的只有英文名称的文件,没有中文的。

工具类

   public class ZipHelper
    {
        public static void ZipFile(string strFile, string strZip)
        {
            if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar)
                strFile += Path.DirectorySeparatorChar;
            ZipOutputStream s = new ZipOutputStream(File.Create(strZip));
            s.SetLevel(6);
            zip(strFile, s, strFile);
            s.Finish();
            s.Close();
        }
        private static void zip(string strFile, ZipOutputStream s, string staticFile)
        {
            if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar;
            Crc32 crc = new Crc32();
            string[] filenames = Directory.GetFileSystemEntries(strFile);
            foreach (string file in filenames)
            {

                if (Directory.Exists(file))
                {
                    zip(file, s, staticFile);
                }

                else // 否则直接压缩文件
                {
                    //打开压缩文件
                    FileStream fs = File.OpenRead(file);

                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1);
                    ZipEntry entry = new ZipEntry(tempfile);
                    //设置wei unicode编码
                    entry.IsUnicodeText = true;
                    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);
                }
            }
        }
    }

该类是从网上拷贝过来的,原文地址:http://blog.youkuaiyun.com/nieweiking/article/details/8663837

解决乱码办法

http://www.cnblogs.com/leodrain/archive/2009/05/04/fixed-sharpziplib-fastzip-not-surport-chinese-charater-file.html

为对象ZipEntry,添加属性

 //设置wei unicode编码
                    entry.IsUnicodeText = true;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值