让ZipOutputStream和ZipInputStream支持中文

ZipInputStream解压有中文名报错问题解决 对jdk内置的zip解压缩存在bug 如果zip文件里有中文文件,会报错 现在把这个问题解决。 立即下载
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 这一篇其实是延续「压缩与解压缩」相关系列文章的中文档名处理问题。 之前介绍了利用java.util.zip这个package里的class来完成压缩及解压缩的工作,但是我们知道,java对於文字的编码是以unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗! 但是,现在市面上的压缩及解压缩软体,例如winzip,却是不支援unicode的,一碰到档名以unicode编码的档案,它就不处理。 那要如何才能做出让winzip能够处理的压缩档呢?那就得从修改ZipInputStream及ZipOutputStream对於档名的编码方式来着手了。我们可以从jdk的src.zip取得ZipInputStream及ZipOutputStream的原始码来加以修改: 一、ZipOutputStream.java 1.从jdk的src.zip取得ZipOutputStream.java原始码,另存新档存到c:/java/util/zip这个资料夹里,档名改为CZipOutputStream.java。 2.开始修改原始码,将class名称改为CZipOutputStream 3.建构式也必须更改为CZipOutputStream 4.新增member,这个member记录编码方式 private String encoding="UTF-8"; 5.再新增一个建构式(这个建构式可以让这个class在new的时候,设定档名的编码) public CZipOutputStream(OutputStream out,String encoding) { super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true)); usesDefaultDeflater = true; this.encoding=encoding; } 6.找到byte[] nameBytes = getUTF8Bytes(e.name);(有二个地方),将它修改如下: byte[] nameBytes = null; try { if (this.encoding.toUpperCase().equals("UTF-8")) nameBytes =getUTF8Bytes(e.name); else nameBytes= e.name.getBytes(this.encoding); } catch(Exception byteE) { nameBytes=getUTF8Bytes(e.name); } 7.将档案储存在c:/java/util/zip这个资料夹内,请记得一定要有这个路径结构, 才能把CZipOutputStream.class放在正确的package结构里 二、ZipInputStream.java 1.从jdk的src.zip取得ZipInputStream.java原始码,另存新档存到c:/java/util/zip这个资料夹里,档名改为CZipInputStream.java。 2.开始修改原始码,将class名称改为CZipInputStream 3.建构式也必须更改为CZipInputStream 4.新增member,这个member记录编码方式 private String encoding="UTF-8"; 5.再新增一个建构式如下(这个建构式可以让这个class在new的时候,设定档名的编码) public CZipInputStream(InputStream in,String encoding) { super(new PushbackInputStream(in,512),new Inflater(true),512); usesDefaultInflater = true; if(in == null) { throw new NullPointerException("in is null"); } this.encoding=encoding; } 6.找到ZipEntry e = createZipEntry(getUTF8String(b, 0, len));这一行,将它改成如下: ZipEntry e=null; try { if (this.encoding.toUpperCase().equals("UTF-8")) e=createZipEntry(getUTF8String(b, 0, len)); else e=createZipEntry(new String(b,0,len,this.encoding)); } catch(Exception byteE) { e=createZipEntry(getUTF8String(b, 0, len)); } 7.将档案储存在c:/java/util/zip这个资料夹内,请记得一定要有这个路径结构,才能把CZipInputStream.class放在正确的package结构里 以上两个档案储存後compile产生CZipOutputStream.class及CZipInputStream.class,使用winzip开启[java_home]/jre/lib/rt.jar这个档案,将CZipOutputStream.class及CZipInputStream.class加进去,记得「Save full path info」一定要打勾。 以後当压缩及解压缩时有中文档名及路径的问题时,就可以指定编码方式来处理了。 CZipOutputStream zos=new CZipOutputStream(OutputStream os,String encoding); CZipInputStream zins=new CZipInputStream(InputStream ins,String encoding); 以「压缩与解压缩(1)」为例: FileOutputStream fos =new FileOutputStream(request.getRealPath("/") "myzip.zip"); CZipOutputStream zos=new CZipOutputStream(fos,"BIG5"); 其他地方都不用改,便可以处理中文档名的压缩。 ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 此文章来自台湾的jsp学习网,用的是繁体中文编码"BIG5",如果简体的话改为"GB2312"编码即可,压缩和解压缩具体步骤比较简单,看看java文档就会了,这里就不再罗嗦了。如果有 不明白的地方可以按照上面网址的链接去看一下原文的网站,这个网站真的很好,相信你看过之后会和我有同样的感觉的!!! 还有就是如果对此篇文章有什么异议的话,请给我发邮件我的邮箱地址是:wangwp@mailer.com.cn 欢迎大家踊跃的讨论和学习,共同进步是我的心愿。
别再手动转格式了!用Java+LibreOffice命令行实现Word批量转PDF(附Docker部署避坑指南) 本文详细介绍了如何利用Java和LibreOffice命令行实现企业级Word批量转PDF的自动化解决方案,包括多线程优化、Docker化部署及常见问题排查。通过代码示例和实战经验,帮助开发者高效处理文档转换需求,提升工作效率并避免常见陷阱。 阅读详情

相关推荐

⭐️白嫖的阿里云认证⭐️ 【真题&参考答案】:大模型Clouder认证:利用大模型提升内容生产能力

【摘要】真题「大模型Clouder认证:利用大模型提升内容生产能力」

davidkorhenn的博客 1935

windows下文件名正常,但linux下用ZipOutputStream压缩后中文文件名乱码

在windows下文件名正常,但部署linux下文件名却出现乱码搞了一个晚上,知道是编码的问题,网上查到的大致有两种解决方面(好像都不行):1、修改java.util.zip下对应的类。这个方法改了太麻烦了,而且ant包中的已经有现成的了,而且也没有用(可能是我没改好吧)2、用ant提供的来代替,把import 里的java.util.zip改成org.apache.tools.zip。这种方法在

wienne0417的专栏 6399

CrackerXI+脱壳实战:解决iOS应用逆向中的加密文件问题

本文详细介绍了如何使用CrackerXI+工具对iOS应用进行脱壳,解决App Store应用因FairPlay DRM加密而无法进行静态分析的难题。通过图形化界面一键操作,CrackerXI+能高效获取解密后的可执行文件,为逆向工程奠定基础。文章涵盖工具选型、实战步骤及常见问题排查,是iOS逆向入门与进阶的实用指南。

seed的博客 259

java 读写 txt 文件,编码使用utf-8

java txt文件 读写,utf-8 格式。

hongsheng007的博客 4581

FPGA上的YOLOv8加速实现:从Verilog到高层综合

YOLOv8 采用了更高效的C2f模块与轻量化Backbone结构,模型特征包括:结构紧凑、检测头融合高低层特征;支持Anchor-free检测机制;支持INT8、FP16低精度推理;计算密度高,适合FPGA并行优化。

2501_93174773的博客 918

Zemax单模光纤耦合仿真避坑指南:数值孔径、模式匹配与镀膜影响详解

本文详细解析了Zemax单模光纤耦合仿真中的关键避坑要点,包括数值孔径的多重定义与换算、模式匹配度评估及镀膜影响分析。通过实际案例和技术公式,帮助工程师避免常见仿真误差,提升激光通信和光纤传感系统的设计精度。特别针对OpticStudio用户提供了实用的参数设置建议和优化策略。

weixin_30836759的博客 467

android 文件上传,中文utf-8编码

要上传文件到后台的php服务器,服务器能收到中文,手机发送过去,却只能收到一堆转了UTF-8的编码(就是要decode后才是中文的编码).android这边上传文件通常是用stream方式上传的,用MultipartEntity这个开源包来上传了会有编码问题. 首先设置字段的编码 //CustomMultiPartEntity entity=new CustomMultiPartEntit...

weixin_34320724的博客 375

逆向攻防世界CTF系列40-ReverseMe-120

注意sub_401000main中只传了两个参数,但是跟进后发现四个(可能是隐式传递,放在寄存器里传递了),调试发现a4是输入长度,与最终的you_know_how_to_remove_junk_code比较的是v12(但是并没有被传入),开始怀疑是不是隐式传递了。_mm_xor_si128用于计算128位(16字节)的按位异或,然后通过v14控制循环结束的条件,可以看到v14增长的步长为16,而且通过上面得到的flag值解码得到的字符串为32个字节大小,正好是16的整数倍。

LH1013886337的博客 1411

Java-ZipOutputStream介绍

Java中的ZipOutputStream类是用于压缩数据的输出流。它可以将数据写入一个zip文件中,并且可以将多个文件压缩成一个zip文件。ZipOutputStream继承自DeflaterOutputStream类,通过使用ZipEntry对象来表示压缩文件的条目。ZipOutputStream类提供了一些方法来向zip文件中写入数据,包括写入数据流、写入字节数组、写入字符串等。它还提供了一些方法来设置压缩级别、设置注释、设置文件日期和时间等。

架构师之路。。 3316

小梅哥Xilinx ZYNQ学习笔记2——38译码器

译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。1.case开始开始,endcase结束;2.数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。

m0_51430584的博客 1636

LSTM 双向 Bi-LSTM

LSTM 双向 Bi-LSTM

jacke121的专栏 1519

java.util.zip.ZipInputStream读取zip文件采坑记录

问题描述 最近做个东西,需求是这样的。web端上传一个zip的Java应用部署包到Linux服务器上的指定目录下,我负责后端。 zip包目录结构是这个的: · conf # 该目录下存放app配置文件 · lib # 该目录下存放app用到的jar包 需求很简单,于是开始实现,主体代码也就是下面这样子。 byte[] buf = new byte[1024]; try (ZipInputStre...

翱翔云端的专栏 4961

098、C3k2_Ghost:用 GhostConv 替代 C3k2 内标准卷积的轻量化改造代码

本文介绍了用GhostConv轻量化改造YOLOv11中C3k2模块的实践。作者通过线上部署案例引出问题,详细解析了GhostConv的核心实现逻辑,指出直接替换标准卷积会导致的两个关键问题:通道数不匹配和kernel_size冲突。文章提供了完整的C3k2_Ghost实现代码,包含注意事项和调试技巧。消融实验显示,该方法在小模型上可减少27%-28%参数量、34%-35%FLOPs,仅损失0.8mAP。作者总结了适用场景:小模型效果显著,大模型需谨慎;检测小目标任务不推荐;训练时需调整学习率。最后强调sh

sundong_81的博客 62

支持中文的zip压缩和解压,修改自带jdk ZipInputStream、ZipOutputStream、ZipEntry代码

用过jdk自带的压缩或解压想必大家都知道不支持中文         之前介绍了利用java.util.zip这个package里的class来完成压缩及解压缩的工作,但是我们知道,java对於文字的编码是以unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗!但是,现在市面上的

弯弯专栏 2573

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[转载]让ZipOutputStream和ZipInputStream支持中文

让ZipOutputStream和ZipInputStream支持中文这一篇其实是延续「压缩与解压缩」相关系列文章的中文档名处理问题。 之前介绍了利用java.util.zip这个package里的class来完成压缩及解压缩的...

congji3817的博客 453

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java中压缩与解压--中文文件名乱码解决办法

本文参阅了台湾JSP学习网部分内容,略有增删.java对於文字的编码是以 unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗!但是,现在市面上的压缩及解压缩软体,例如winzip,却是不支援unicode的,一碰到档名以unicode编码的档案,它就不处理。 那要如何才能做出让

robin622的专栏 2233

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java中压缩与解压--中文文件名乱码解决办法(扩展java.util.zip下的ZipOutputStream包)

java对於文字的编码是以 unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗!但是,现在市面上的压缩及解压缩软体,例如winzip,却是不支援unicode的,一碰到档名以unicode编码的档案,它就不处理。 那要如何才能做出让WinRar能够处理的压缩档呢?那就得从修改Z

608

Zip文件解析(包含中文目录)

在解析zip文件时,由于默认版本不支持中文目录,导致解析时遇到中文文件目录会出现乱码: 从网上找到一些资料,自己写了个样例。有兴趣的可以看看。(需要修改原有的zip包,添加构造方法,支持gbk编码) 具体修改class为 ZipinputStream和ZipOutputStream(代码见附件中) 见下方压缩与解析代码:   package ziphandle;   impor...

iteye_8420的博客 325

[Java代码]Java中压缩与解压--中文文件名乱码解决办法

[Java代码]Java中压缩与解压--中文文件名乱码解决办法 软件技术lhwork 发表于 2008-4-2 21:30:15

lijiejacy的专栏 607

Java中的文件压缩

Java中的文件压缩 个人写的一个压缩文件或目录的程序。对于目录中的文件,使用dir//dir//filename.txt格式即可。该程序不支持中文,下面引用了网上的一种解决方案。import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOExceptio

huanyun 593

Java中压缩与解压--中文文件名乱码解决办法(1)

java对於文字的编码是以 unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗!但是,现在市面上的压缩及解压缩软体,例如winzip,却是不支援unicode的,一碰到档名以unicode编码的档案,它就不处理。 那要如何才能做出让WinRar能够处理的压缩档呢?那就得从修...

passjia的专栏 189

java压缩解压缩_利用Java实现压缩与解压缩(zip、gzip)支持中文路径

zip扮演着归档和压缩两个角色;gzip并不将文件归档,仅只是对单个文件进行压缩,所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩。Java I/O类库还收录了一些能读写压缩格式流的类。要想提供压缩功能,只要把它们包在已有的I/O类的外面就行了。这些类不是Reader和Writer,而是InputStream和OutStreamput的子类。这是因为压缩...

weixin_36295010的博客 474
上一篇: 通告:中文java网正在移植服务器
下一篇: 网络开发应用JAVA EJB开发中间件(weblogic oracle ejb)
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值