Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / winzipaes文件名乱码解决方案

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();本文相关资源下载:------------------------------------------分割线------------------------------------------免费下载地址在 http://linux.linuxidc.com/用户名与密码都是www.linuxidc.com具体下载目录在 /2014年资料/11月/6日/Java解压带密码的RAR压缩文件下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm------------------------------------------分割线------------------------------------------本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-11/109060.htm