`
wuhaidong
  • 浏览: 357759 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

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

    博客分类:
  • SE
 
阅读更多

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

一、ZipOutputStream.java 
1.从jdk的src.zip取得ZipOutputStream.java原始码,另存到一个新文件中,档名改为CNZipOutputStream.java。 
2.开始修改原始码,将class名称改为CNZipOutputStream 
3.建构式也必须更改为CNZipOutputStream 
4.新增member,这个member记录编码方式 
  private static String encoding="UTF-8"; 
5.再新增一个建构式(这个建构式可以让这个class在new的时候,设定档名的编码) 
  public CNZipOutputStream(OutputStream out,String encoding) { 
     this(out); 
     this.encoding=encoding; 
  } 
6.getUTF8Bytes(String a)方法的最前面加上如下代码 
try{ 
    if (s!=null&&s!=""&&!encoding.toUpperCase().equals("UTF-8")){ 
         return s.getBytes(encoding); 
    } 
}catch(Exception byteE){ 
} 

二、ZipInputStream.java 
1.从jdk的src.zip取得ZipInputStream.java原始码,另存到一个新文件中,档名改为CNZipInputStream.java。 
2.开始修改原始码,将class名称改为CNZipInputStream 
3.建构式也必须更改为CNZipInputStream 
4.新增member,这个member记录编码方式 
  private static String encoding="UTF-8"; 
5.再新增一个建构式如下(这个建构式可以让这个class在new的时候,设定档名的编码) 
public CNZipInputStream(InputStream in,String encoding) { 
  this(in); 
  this.encoding=encoding; 
} 

6.找到getUTF8String方法,在方法最前面加上如下代码: 
try{ 
    if (b!=null&&!encoding.toUpperCase().equals("UTF-8")){ 
        return new String(b,0,len,encoding); 
    } 
}catch(Exception byteE){ 
} 


还是使用java.util.zip包,然后编译。以上两个档案储存後compile产生CNZipOutputStream.class及CNZipInputStream.class,使用winzip开启 [java_home]\jre\lib\rt.jar这个档案,将CNZipOutputStream.class及 CNZipInputStream.class加进去,以後当压缩及解压缩时有中文档名及路径的问题时,就可以指定编码方式来处理了。 

使用方法: 
CNZipOutputStream zos=new CNZipOutputStream(OutputStream os,String encoding); 
CNZipInputStream zins=new CNZipInputStream(InputStream ins,String encoding); 

对于前面文章中文件打包下载中遇到的中文文件问题,解决手法是: 
OutputStream os = response.getOutputStream(); 
CNZipOutputStream zos = new CNZipOutputStream(os,"gbk"); //加上中文编码类型
 
分享到:
评论

相关推荐

    文件解压和压缩 解决中文乱码

    在IT行业中,文件的压缩和解压是一项...总的来说,理解和掌握文件压缩和解压的原理,以及处理中文乱码的方法,对Java开发者来说至关重要,这能够帮助他们有效地处理各种文件操作需求,尤其是涉及到多语言环境的时候。

    JDK ZipEntry压缩中文文件名乱码解决

    项目中碰到问题.jdk zipEntry 压缩中文文件名乱码  上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项.  第二种 就是拿来主义,因为 开源项目 Ant 里已经有...

    java zip压缩解压工具解决中文乱码问题

    在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...

    java压缩zip文件解决中文乱码问题

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

    java android zip解压缩(解决压缩中文乱码问题)

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    java解决压缩中文乱码

    总的来说,解决Java压缩中文乱码问题的关键在于正确处理文件名的编码,确保使用UTF-8编码,并在必要时自定义压缩和解压缩流。通过上述方法,即使不依赖第三方库,也可以在Java程序中实现对中文文件名的完美支持。

    ZipUtil文件压缩工具类(解决中文乱码)

    总之,`ZipUtil`文件压缩工具类通过结合`ZipEntry`和`ZipOutputStream`,提供了一种高效且健壮的解决方案,尤其适合处理包含中文字符的文件和目录,确保在压缩和解压过程中不会出现乱码问题。这对于需要在Java应用...

    读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码(还是以支付宝对账单为例)

    本文将深入探讨如何在不解压的情况下直接读取ZIP文件,并特别关注如何处理包含中文文件名和内容乱码的问题。我们将以支付宝对账单为例,因为这类文件通常包含大量敏感和重要的财务信息,正确地读取和解析它们至关...

    java解压和压缩tar包

    本文将详细讲解如何使用Java来解压和压缩tar包,同时解决在处理中文文件名时可能出现的乱码问题,主要关注`javatar-2.5.jar`库中的功能以及`TarUtil.java`类的应用。 首先,`javatar-2.5.jar`是一个专门用于处理tar...

    ZipOutputStream 压缩文件以及乱码问题解决方案

    在IT行业中,文件压缩是一种常见的数据存储和传输方式,ZipOutputStream是Java标准库中的一个类,用于将数据流写入ZIP格式的压缩文件。本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码...

    ZipInputStream解压有中文名报错问题解决

    在Java编程中,`ZipInputStream`是用于读取和解压ZIP格式的压缩文件的核心类。然而,正如标题和描述中指出的,当ZIP文件包含带有中文文件名的条目时,使用`ZipInputStream`进行解压可能会遇到问题。这个问题通常表现...

    解压文件时中文乱码

    - **重命名文件**:如果只是个别文件名乱码,可以尝试先在压缩包内重命名文件,使用英文或无争议的字符,再进行解压。 - **使用支持Unicode的压缩工具**:例如7-Zip,它在创建和解压ZIP文件时,默认使用UTF-8编码...

    org.apache.tools.zip解决解压乱码问题

    * @param zipFileName 压缩产生的zip包文件名--带路径,如果为null或空则默认按文件名生产压缩文件名 * @param relativePath 相对路径,默认为空 * @param directory 文件或目录的绝对路径 * void */ ...

    Java ZIP压缩一个或多个文件(解决中文名称乱码).rar

    用java.util.zipoutputstream压缩会出现中文的文件名乱码的情况,且无法设置字符集,这个版本用org.apache.tools.zip.ZipOutputStream压缩,可以自定义字符集,解决中文的文件名乱码问题。

    java压缩zip文件中文乱码问题解决方法

    总之,解决Java压缩ZIP文件中文乱码问题的关键在于使用支持设置编码的第三方库,并在处理中文内容和注释时明确指定正确的字符编码。这样,无论在何种编码环境中,都能确保中文字符正确无误地被压缩和解压。

    zip解压缩乱码的解决方案

    总之,解决ZIP解压缩乱码的关键在于正确识别和处理文件名的编码。通过选择合适的解压工具、手动指定编码、编写自定义脚本等方式,我们可以有效地避免或解决乱码问题,提高工作效率。在日常工作中,养成良好的编码...

    用java对文件进行压缩并且解决乱码问题

    在Java编程中,对文件进行压缩是一个常见的任务,这通常涉及到使用`ZipOutputStream`类。`ZipOutputStream`是Java标准库中的一个类,它继承自`FilterOutputStream`,用于创建ZIP格式的压缩文件。当我们使用这个类...

    安卓文件下载上传解压相关-javaandroidzip解压缩解决压缩中文乱码问题).rar

    本文将深入探讨如何使用Java在Android环境中处理这些任务,特别是解决中文文件名在压缩和解压缩过程中可能出现的乱码问题。 首先,让我们关注文件的下载和上传。在Android中,我们可以使用`java.net.URL`和`java...

    java解压支持中文

    在IT行业中,尤其是在Java编程领域,处理中文字符在文件名或路径中经常遇到挑战,因为标准的ASCII编码不包含大部分中文字符。标题“java解压支持中文”涉及到的关键知识点是Java如何正确处理含有中文字符的压缩文件...

Global site tag (gtag.js) - Google Analytics