java中zip压缩包的中文处理问题

java内置了对zip格式压缩文件的处理,常用的的几个类包括:



1、ZipFile


2、ZipInputStream


3、ZipOutputStream


4、ZipEntry


但在处理压缩文件中的中文入口时是会报IllegalArgumentException异常,但这并非是其不支持中文,而是因为其默认的压缩文件中的文字编码格式为unicode,而常用的压缩工具如WINZIP/WINRAR压缩后的文件中的文字编码格式为acsii,因此如果需要处理常用的ZIP文件,就必须手工来处理一下了。


常见的几种方式有:

1、修改相关类中的处理方式,关键代码如下(以ZipInputStream为例):


原代码: ZipEntry e = createZipEntry(getUTF8String(b, 0, len));


修改为:


 ZipEntry e = null;


//这里encoding是成员变量,可以在构建函数中赋值


if (encoding=null) e=createZipEntry(getUTF8String(b, 0, len));


else e=createZipEntry(new String(b, 0, len, encoding));


替换的方式也有三种:



1、创建替换类(在同一包名下),并替换rt.jar中的同名类


2、创建替换类(在同一包名下),单独打包并放在类路径中(但有些服务器可禁用java开头的包)


3、在应用中创建自己的类,随应用发布


 

2、使用ANT包中的org.apache.tools.zip中的相关类,但不包含ZipInputStream的对应类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值