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

写在前面

业务逻辑是这样的,需要导出一个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.csdn.net/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;
博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/5146101.html
时间: 2025-01-21 13:27:13

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

PHP附件下载中文名称乱码的解决方法_php技巧

本文实例讲述了PHP附件下载中文名称乱码的解决方法.分享给大家供大家参考,具体如下: PHP中,如果要下载的文件名称为中文,则会出现文件标题乱码. 此时就需要对标题进行编码,也就是说先进性urlencode,然后再放入header,然后问题就解决了. $filename = urlencode("下载文档"); header ( "Content-disposition: attachment; filename=$filename.xls" ); 网上说,在RFC

Fckeditor解决上传中文名称图片出现乱码问题(For ASP)

解决|上传|问题|中文|fckeditor Fckeditor解决上传中文名称图片出现乱码问题(For ASP) 此例仅适用于ASP下的代码修改,其它语言也可以通过本文对应修改相关文件代码即可. 题外:其实Fckeditor本身就应该提供一个类似 FCKConfig.AutoSave的参数给大家选择是否自动命名上传文件或以原文件名称上传的功能,希望下个版本能实现吧:) 好,进入正题,在ASP实现Fckeditor上传图片自动命名的功能很简单,就只有两步: 1.修改editor\filemanag

解决HttpClient的FilePart上传文件中使用中文名称文件名乱码问题

[java] view plaincopy String targetUrl = "http://localhost:8080/Test";          PostMethod filePost = new PostMethod(targetUrl) {//这个用来中文乱码                  public String getRequestCharSet() {                          return "UTF-8";//

Response.AddHeader使用实例收集 如何做下载,下载中文显示乱码怎么办 ContentType类型大全

非常有用的文章~!~!忘记的时候可以来查找一下... 文件下载,指定默认名srxljl Response.AddHeader("content-type","application/x-msdownload"); Response.AddHeader("Content-Disposition","attachment;filename=要下载的文件名.rar"); 刷新页面srxljl Response.AddHeader &

通过freemarker生成一个word,解决生成的word用wps打开有问题的问题,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件(要注意的是生成xml格式要是2003格式的xml,也就是说拿到的word模板得是2003格式的,否则用wps打开word将会出现问题)   详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(si

multipart ile-MultipartFile上传文件时,中文文件名乱码怎么解决?

问题描述 MultipartFile上传文件时,中文文件名乱码怎么解决? package com.upload; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Co

SERV-U无法创建修改中文名称文件与目录

很显然这很不符合同事们的操作习惯呀,改,必须得改..     Serv-U无法创建修改中文名称文档的解决办法: 1.打开Serv-U 控制台,点击"限制和设置"–"为域配置高级FTP命令设置和行为". 2.在FTP设置中找到OPTS UTF8命令,右击禁用此命令. 3.点击下面的"全局属性". 4.在出来的FTP命令属性选项卡中,"高级选项"里,把"对所有收发的路径和文件名使用UFT-8编码"前面的钩去掉!

解决win7系统所有中文显示乱码的方法教程

  在win7系统下我们如果把语言操作系统界面语言修改为英文后,有部分用户的电脑中的英文字体将显示乱码的问题,对于出现该问题是因为中文不是Unicode语言,用户在将系统语言设置为英文后,语言设置的非Unicode设置出问题而导致的,故此我们需要将非Unicode的语言修改为中文语言即可解决这个问题,下面我们看下具体的操作教程吧! 解决win7系统所有中文显示乱码的方法教程 1.点击开始菜单图标并单击打开控制面板. 2.在区域和语言设置-管理中,选择更改显示语言. 3.选择管理标签,并点击更改系

win7英文版中文显示乱码解决

win7英文版中文显示乱码-很多软件无法安装的解决 win7英文版中文显示乱码处理方式: Control Pannel-->Clock, Language, and Region--> Administrative-->Change system locale-->Select Chinese (PRC)