java语言 百分网手机站

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

时间:2020-09-15 15:41:26 java语言 我要投稿

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

  通常用java来打包文件生成压缩文件后,有如下两个地方会出现乱码,怎么解决呢?下面是相关的知识,欢迎阅读。

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

  1、内容的中文乱码问题,这个问题网上很多人给出了解决方法,主要有两种方法:一是修改sun的源码;另一个是使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以直接下载使用即可,毫无疑问,选择后者更方便

  2、压缩文件注释的中文乱码问题:zos.setComment("中文测试");这个问题网上对应的解决方法资料较少。在自己机器上的工程创建的测试类,没有任何问题,但是在公司的项目中使用一直出现乱码,通过使用设置编码的方法(zos.setEncoding("gbk");)终于发现了问题,测试项目的`编码方式为gbk,而公司项目的默认编码是utf-8,所以测试项目没问题而公司的项目中出现了问题。

  org.apache.tools.zip.ZipOutputStream默认使用项目的编码方式,理论上讲utf-8也是支持中文的,实在想不通为啥还是乱码,通过setEncoding方法改成gbk即可解决

  针对上述问题的示例代码如下:

  package com.compress;

  import java.io.BufferedInputStream;

  import java.io.BufferedOutputStream;

  import java.io.DataInputStream;

  import java.io.File;

  import java.io.FileInputStream;

  import java.io.FileOutputStream;

  import org.apache.tools.zip.ZipEntry;

  import org.apache.tools.zip.ZipOutputStream;

  public class CompressEncodingTest {

  /**

  * @param args

  * @throws Exception

  */

  public static void main(String[] args) throws Exception {

  File f = new File("中文测试.txt");

  ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(

  new FileOutputStream("zipTest.zip"), 1024));

  zos.putNextEntry(new ZipEntry("中国人.txt"));

  DataInputStream dis = new DataInputStream(new BufferedInputStream(

  new FileInputStream(f)));

  zos.putNextEntry(new ZipEntry(f.getName()));

  int c;

  while ((c = dis.read()) != -1) {

  zos.write(c);

  }

  zos.setEncoding("gbk");

  zos.setComment("中文测试");

  zos.closeEntry();

  zos.close();

  }

  }


【java压缩zip文件中文乱码问题解决方法】相关文章:

Java读取、写入文件如何解决乱码问题09-29

解决PHP中文乱码问题09-23

java如何解决乱码问题10-03

php如何解决中文乱码问题08-26

php中文乱码问题的解决方案09-08

php各种应用乱码问题的解决方法09-22

java类文件内容介绍12-07

php处理json时中文问题的解决方法09-22

Word文档出现乱码的解决方法11-08

php如何使用fgetcsv读取csv文件出现乱码09-28