winzipaes文件名乱码解决措施
发布时间:2021-12-11 12:03:28 所属栏目:教程 来源:互联网
导读:winzipaes是一个开源的基于javaZip的加密压缩工具 目前代码托管在google上(http://code.google.com/p/winzipaes) 需要依赖bcprov的包,可以去maven上下载,也可以在Linux公社资源下载,见本文下面的下载地址。 用过的人可能都会发现当使用它,往压缩包里添
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 .... } 然后将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(); ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |