JAVA 解压缩带中文名的文件,文件夹乱码问题
来源:互联网 发布:最新软件开发工具 编辑:程序博客网 时间:2024/06/07 02:12
关于这个在网上找了很多资料,今天终于把这个问题解决了
由于JAVA ZIP类,在解压缩文件的时候将文件名称,或者文件夹名称均转换成UTF8编码,这种方法对于英文字符没影响,但是对于亚洲地区的字符
在解压缩时就会出现乱码。解压缩软件并不支持UTF-8编码。
在网上主要有2种解决这个问题方法,一种是调用ANT包里面的类,一种就是修改源代码。由于现在的工作需要,故选择的第二种方案
1.首先找到JDK文件下的SRC.ZIP文档解压出来。找到java.util.zip.ZipInputStream 和 java.util.zip.ZipOutputStream类。
通过修改这2个类,可以解决问题。
2. 先看 ZipInputStream 类中 private void readLOC()方法
找到ZipEntry e = createZipEntry(getUTF8String(b, 0, len));
改为以下代码:
ZipEntry e = null;
try {
if (System.getProperty("file.encoding").toUpperCase().equals(
"UTF-8"))
e = createZipEntry(getUTF8String(b, 0, len));
else
e = createZipEntry(new String(b, 0, len, System
.getProperty("file.encoding")));
} catch (Exception byteE) {
e = createZipEntry(getUTF8String(b, 0, len));
}
再看ZipOutputStream 类
在这个类中,有很多地方都调用了 getUTF8Bytes()方法;
将调用这个方法代码改为以下形式即可,
byte[] nameBytes = null;
try {
if (System.getProperty("file.encoding").toUpperCase().equals("UTF-8"))
nameBytes =getUTF8Bytes(e.name);
else
nameBytes= e.name.getBytes(System.getProperty("file.encoding"));
}
catch(Exception byteE) {
nameBytes=getUTF8Bytes(e.name);
}
3.代码部署
找到JRE/LIB下的rt.jar文件,用WinZip解压,然后将这2个类放到相应的包下,并将rt.jar压缩,覆盖到原来位置
这样在用JAVA ZIP包,解压缩带有中文名称
- JAVA 解压缩带中文名的文件,文件夹乱码问题
- java下载文件的时候中文名乱码
- 下载文件:中文名乱码问题
- Java模拟表单文件上传(微信/中文名乱码问题)
- 解压缩带有中文名文件的ZIP包
- 解压缩带有中文名文件的ZIP包 .
- (java)解决文件是中文名打包成zip文件名称乱码的问题。
- Java处理文件上传时文件的中文名出现乱码问题
- 关于jspsmartupload中文名文件上传后为乱码的问题
- 在Drupal,上传中文名文件乱码的问题
- 完美解决Python2操作中文名文件乱码的问题
- 解决Python2操作中文名文件乱码的问题
- (精)java:生成文件下载的中文名乱码解决
- java web 上传文件的中文名乱码纪要
- zip压缩/解压缩带空文件夹的文件
- javaweb文件下载中文名乱码问题
- Firefox下载文件时中文名乱码问题
- Firefox下载文件时中文名乱码问题
- 关于SVN Hooks(钩子)的使用 (5)
- [转] 用 CodeIgniter 开发动态 Web 站点 - 利用 MVC 框架和 CRUD 提高效率
- 单播,广播,组播(多播)
- 我与惠普之间的故事
- Spring中常用的hql查询方法 (getHibernateTemplate())
- JAVA 解压缩带中文名的文件,文件夹乱码问题
- Joomla 插件 JDownloads 中的下载文件管理
- 桌面程序的未来??[liangsuilong,20090810](朱佳峰)
- 如何起动一个应用程序在收到短信时
- Oracle 拆分字符串
- VS 2005调试时出现若要调试此模块,请将其项目生成配置更改为“调试”模式
- 中国开始严密监控2012超级太阳风暴[cnbeta,2010.4.2](朱佳峰)
- Struts2与Spring整合
- 贴片电阻封装