app加载winrar转区解压,双击文档正常,但真正winrar数据解压缩软件之后标题正常,内容仍旧是乱码

Java ZIP压缩和解压缩文件(解决中文文件名乱码问题) - 推酷
Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的
zip文件打开时发现中文文件名变成乱码.
解决的方法是使用apache-ant-zip.jar包(见附件)中的ZipOutputStream和ZipEntry.
即,导入类:
import org.apache.tools.zip.ZipE&
import org.apache.tools.zip.ZipOutputS
并且注意,压缩之前调用
ZipOutputStream的out.setEncoding(System.getProperty(&sun.jnu.encoding&));
系统参数sun.jnu.encoding表示获取当前系统中的文件名的编码方式.这里将ZipOutputStream的文件名编码方式
设置成系统的文件名编码方式.
解压时,直接使用JDK原来的ZipInputStream即可.
的地方是,在读取ZIP文件之前,需要设置:
System.setProperty(&sun.zip.encoding&, System.getProperty(&sun.jnu.encoding&));
将系统的ZIP编码格式设置为系统文件名编码方式,否则解压时报异常.
(网上,还有修改ZipInputStream源码的方式貌似太麻烦了,参考:/blog/871260)
ZIP代码参考/blog/199059,有修改.
import java.io.BufferedInputS
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputS
import org.apache.tools.zip.ZipE
import org.apache.tools.zip.ZipOutputS
public class Zip
static final int BUFFER = 8192;
public Zip()
private static void compress(File file, ZipOutputStream out, String basedir)
/* 判断是目录还是文件 */
if (file.isDirectory())
// System.out.println("压缩:" + basedir + file.getName());
compressDirectory(file, out, basedir);
// System.out.println("压缩:" + basedir + file.getName());
compressFile(file, out, basedir);
/** 压缩一个目录 */
private static void compressDirectory(File dir, ZipOutputStream out, String basedir)
if (!dir.exists())
File[] files = dir.listFiles();
for (int i = 0; i < files. i++)
/* 递归 */
compress(files[i], out, basedir + dir.getName() + "/");
/** 压缩一个文件 */
private static void compressFile(File file, ZipOutputStream out, String basedir)
if (!file.exists())
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
byte data[] = new byte[BUFFER];
while ((count = bis.read(data, 0, BUFFER)) != -1)
out.write(data, 0, count);
bis.close();
catch (Exception e)
throw new RuntimeException(e);
public static void zip(String srcPathName, String zipFileName)
File file = new File(srcPathName);
File zipFile = new File(zipFileName);
if (!file.exists()) throw new RuntimeException(srcPathName + "不存在!");
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
out.setEncoding(System.getProperty("sun.jnu.encoding"));//设置文件名编码方式
String basedir = "";
compress(file, out, basedir);
out.close();
catch (Exception e)
throw new RuntimeException(e);
public static void main(String[] args)
Zip.zip("D:\\D\\dll", "D:\\D\\dll.zip");
UnZip代码:
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.IOE
import java.util.zip.ZipE
import java.util.zip.ZipInputS
public class UnZip
public static void unzip(String zipFilePath, String destDir)
System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding")); //防止文件名中有中文时出错
//System.out.println(System.getProperty("sun.zip.encoding")); //ZIP编码方式
//System.out.println(System.getProperty("sun.jnu.encoding")); //当前文件编码方式
//System.out.println(System.getProperty("file.encoding")); //这个是当前文件内容编码方式
File dir = new File(destDir);
// create output directory if it doesn't exist
if (!dir.exists()) dir.mkdirs();
FileInputS
// buffer for read and write data to file
byte[] buffer = new byte[1024];
fis = new FileInputStream(zipFilePath);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry ze = zis.getNextEntry();
while (ze != null)
String fileName = ze.getName();
File newFile = new File(destDir + File.separator + fileName);
//System.out.println("Unzipping to " + newFile.getAbsolutePath());
// create directories for sub directories in zip
new File(newFile.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile);
while ((len = zis.read(buffer)) > 0)
fos.write(buffer, 0, len);
fos.close();
// close this ZipEntry
zis.closeEntry();
ze = zis.getNextEntry();
// close last ZipEntry
zis.closeEntry();
zis.close();
fis.close();
catch (IOException e)
e.printStackTrace();
public static void main(String[] args)
String zipFilePath = "D:\\D\\dll.zip";
String destDir = "D:\\D\\dll_zip";
UnZip.unzip(zipFilePath, destDir);
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致我要问题描述
查看: 3880|回复: 2
解压缩时请用App把winrar用日区打开再解压,否则解压后有乱码
UID: 178432
论坛新人, 积分 0, 距离下一级还需 50 积分
解压缩时请用App把winrar用日区打开再解压,否则解压后有乱码~~~~~~~~~~~~~~~~~~~~APP是什么东西来的~~~?????能解析下这句话吗~???
UID: 225241
App---Microsoft AppLocale
LTB:+10(heyong253) 感谢您热心帮助他人、支持论坛,论坛有您更精
UID: 178432
论坛新人, 积分 0, 距离下一级还需 50 积分
谢谢了~~搞掂~~~~
Powered by【求助】如果解压文件内的日文文件夹乱码了怎么办?_akb48吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:597,814贴子:
【求助】如果解压文件内的日文文件夹乱码了怎么办?收藏
318元=298元蛋糕抵用券*1+198元蛋糕抵用券*1+蛋糕五折券*1+20元优惠券*3
不懂,帮顶
重新解压,用applocale把winrar转换成日文模式再解压就可以了
还是乱码啊
我也是用这个方法的呢~
你确定那是日文文件吗..?不会是繁体中文吧?
为什么还是乱码啊
不可能吧?我试过都可以正常解压的文件不多的话你换个办法,把所有的文件名复制到一个txt文件里,然后直接拖到ie打开,选择日文编码就可以正常显示了,然后再自己手动改文件名
诺心蛋糕6周年庆!价值318元的超值大礼包,给你6倍欢乐 。
繁体日文都试过了?
一千多个文件 是酱坛下的
繁体中文啦!才木有繁体日文的啊!~试试先解1, 2个吧!
繁体中文 日文 都试过了
你的机子是不是简体中文呢?
是啊 windows7
我可耻的求文件……
如果是64位win7 app是无效的
算了就这样吧 给各位巨巨跪谢了
酱坛下的什么文件?
哦,那没什么要紧的,还以为是歌曲名乱了
我也是同样情况,只要是日文的压解出来都成乱码!
同求真相帝解答!
下载【好压】压缩软件,然后按下图进行设置。邮件中的日语附件另存,然后用【好压】软件打开需解压缩的文件。这样可解决解压文件乱码问题。
找了好久没好的解决方法,好压直接转个码就搞定了,点赞
换解压软件试试,不然就一个个解压,数量太大容易有这样的问题,还有就是你电脑可能不太行了
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 下载winrar解压缩软件 的文章

 

随机推荐