winzipaes是一个开源的基于javaZip的加密压缩工具

目前代码托管在google上(http://code.google.com/p/winzipaes)

需要依赖bcprov的包,可以去maven上下载,也可以在Linux公社资源下载,见本文下面的下载地址。

用过的人可能都会发现当使用它,往压缩包里添加的文件名有汉字时,会出现乱码

这是因为winzipaes默认使用的iso-8859-1编码格式,不乱吗才怪啊。。

下面是我的修改方法,基于的是(winzipaes_src_20120104.zip)不对的地方,大虾别拍我啊

首先在ExtZipOutputStream里添加一个设置编码格式的方法,如下:

public void setEncoding(String encoding) {

this.encoding = encoding;

utf8Flg |= isUTF8(encoding);

}

protected boolean isUTF8(String encoding) {

if (encoding == null) {

// check platform's default encoding

encoding = System.getProperty("file.encoding");

}

return "UTF8".equalsIgnoreCase(encoding)

|| "UTF-8".equalsIgnoreCase(encoding);

}

这里有个地方需要注意,当文件名是utf8编码格式的时候,需要设置Zip包的通用位标志

第十一个比特为1,代码修改如下:

修改ExtZipEntry类的initEncryptedEntry方法

public void initEncryptedEntry(boolean utf8Flg) {

setCrc(0); // CRC-32 / for encrypted files it's 0 as AES/MAC checks integritiy

this.flag |= 1; // bit0 - encrypted

if (utf8Flg) {

this.flag |=(1 << 11);  // 通用位标志第十一个比特为1

}

//flag |= 8; // bit3 - use data descriptor

....

}

另附上ZIP包的压缩格式,想深入研究的同学可以参考下:http://www.pkware.com/documents/casestudies/APPNOTE.TXT

然后将ExtZipOutputStream的134行和158行的iso-8859-1替换成上面设置的编码格式

接着,再将106行文件名长度取得的代码改成entry.getName().getBytes(encoding).length

以上就是大致的修改点。

把完整的修改代码也打了个包,省得大家再去修改啦,希望对大家有帮助。

写个简单的使用sample吧:

AESEncrypterBC bc = new AESEncrypterBC();

AesZipFileEncrypter azfe = new AesZipFileEncrypter(

new File("要生成的zip包名.zip"), bc);

azfe.setEncoding("UTF-8");  // 编码格式是在这传进去的

azfe.add(new File("要往zip包里添加的文件路径"), "zip包里显示的文件名字", "密码");

azfe.close();

本文相关资源下载:

------------------------------------------分割线------------------------------------------

具体下载目录在 /2014年资料/11月/6日/Java解压带密码的RAR压缩文件

------------------------------------------分割线------------------------------------------

linux getit文件乱码,winzipaes文件名乱码解决方案相关推荐

  1. 解决浏览器下载文件时中文文件名乱码的问题

    解决浏览器下载文件时中文文件名乱码的问题 很多时候我们需要在后台为前端提供文件下载的功能,但是当文件名中有中文时我们不能直接将文件名返回,需要对中文的文件名进行处理后再返回. 一.文件下载contro ...

  2. 下载文件时,文件名乱码。

    Unicode网页中上传下载文件时发生文件名乱码的问题 最 近有一个需要支持unicode的项目在上传和下载文件时遇到文件名乱码问题. 项目背景, 这个项目关键之处在于需要支持unicode以及支持M ...

  3. linux 文件名的长度不得超过,linux对文件路径和文件名长度的限制

    linux对文件夹以及文件名的长度做了限制,以ubuntu为例,描述文件路径为:/usr/include/linux/limits.h #ifndef _LINUX_LIMITS_H #define ...

  4. linux解压文件名乱码,linux下解压zip文件时,文件名乱码的解决(转载)

    转自:http://blog.sina.com.cn/s/blog_6261f8690101c1gx.html windows下的zip文件,在linux下解压时,经常会出现文件名乱码的情况. 主要原 ...

  5. java解压_Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)

    JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的 zip文件打开时发现中文文件名变成乱码. 解决的方法是使用apache-ant-zip.jar包(见附件)中的 ...

  6. CentOS7 Java应用文件名乱码问题解决(文件下载和创建文件导致的文件名乱码)

    场景描述 spirngboot 部署的Java应用在服务器上,一直都运行得很好. 最近突然发生了乱码问题,同事已通过启动参数 java -Dfile.encoding=utf-8 -jar test. ...

  7. 文件上传文件名乱码的解决方法及形成乱码原因

    采用Struts2提供的文件下载机制时,如果要下载的文件的的名字是中文的话,就会出现乱码问题.解决办法如下(只截取部分代码):              UserFavoritesAttachment ...

  8. Linux代码文件中的中文乱码

    起因: 打开代码文件,代码可能是Windows传输过来的,抑或是从其他地方下载的,在linux系统中打开,出现乱码 . 解决方法(在linux平台上用iconv命令纠正中文乱码):          ...

  9. Linux提取文件夹中文件名,linux命令提取文件夹内特定文件的路径与文件名

    最近需要实现自动化搜寻特定文件夹下的特定文件,并且需要分别保存文件路径与文件名.算然使用python的walk能够实现,但是感觉复杂了些.于是想看看linux自带的命令是否能完成这项工作. 环境 需要 ...

最新文章

  1. Quartz2D绘图
  2. 使用Fiddler抓取手机HTTP流量包
  3. 数据库原理实验二 数据库管理 实验报告
  4. client中周期性边界_HFSS中周期性边界条件的设置
  5. wxWidgets:wxDateSpan类用法
  6. 【详解】()调试方法从线索(错误征兆)出发,通过分析这些线索之间的关系而找出故障,是从个别推断一般的方法。
  7. .NETCore 实现容器化Docker与私有镜像仓库管理
  8. 在过程中要正式批准可交付成果_干货!软考高项项目管理知识体系5大过程组47个过程...
  9. 算法笔记_065:分治法求逆序对(Java)
  10. 轴只显示5个刻度_告别大象腿,迎接魅力美腿,变身女王你只需5个方法
  11. 如何把电压这个浮点值转字符串输出到串口
  12. Python标准库参考-sched
  13. java编程——【Mybatis】之${}和#{}的区别
  14. 如何在 Windows 2000 中安装 Microsoft 环回适配器
  15. HALCON 20.11:深度学习笔记(4)--- 网络和训练过程
  16. java入门第二季--封装--java中的this
  17. 使用java udp开发图片拆包组包例子
  18. [电脑桌面壁纸]macOS Big Sur 桌面壁纸分享
  19. 通州区机器人比赛活动总结_机器人科技活动总结.doc
  20. 2017年网易推出他们的“淘宝客”啦

热门文章

  1. 【干货】用户画像和精准化平台系统实践.pdf(附下载链接)
  2. 【报告分享】2020年中国数据驱动型企业成长路径研究报告.pdf(附下载链接)...
  3. PyTorch系列入门到精通——DataLoader与Dataset
  4. leetcode力扣12. 整数转罗马数字
  5. 数据挖掘之模型选择和融合
  6. 站在BERT肩膀上的NLP新秀们(PART I)
  7. test 1.php,test1.php
  8. 2021年Tiktok用户增长和使用模式?
  9. 计算机前端学哪些好学,Web前端能干什么工作,好学吗
  10. jquery mysql实现加入购物车_使用jQuery实现购物车结算功能