如何解决java压缩文件乱码问题

 更新时间:2019年12月22日 10:59:45   作者:尚  
在本篇文章中我们给大家分享的是一篇关于java压缩文件乱码问题的解决办法,有需要的朋友们可以学习下。

用java来打包文件生成压缩文件,有两个地方会出现乱码:

  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默认使用项目的编码方式,通过setEncoding方法改成gbk即可解决。

java压缩文件代码:

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压缩文件乱码问题的详细内容,感谢大家的学习和对脚本之家的支持。

相关文章

  • SpringSecurity多认证器配置多模式登录自定义认证器方式

    SpringSecurity多认证器配置多模式登录自定义认证器方式

    这篇文章主要介绍了SpringSecurity多认证器配置多模式登录自定义认证器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java实现常用加密算法SM3的方式及测试代码

    Java实现常用加密算法SM3的方式及测试代码

    这篇文章介绍了SM3算法在Java中的实现方式,SM3算法是一种密码散列函数标准,主要用于商用密码应用中的数字签名和验证、消息认证码生成和验证、随机数生成等,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • 在AOP中Spring生成代理类的两种方式

    在AOP中Spring生成代理类的两种方式

    今天小编就为大家分享一篇关于在AOP中Spring生成代理类的两种方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Spring TaskScheduler使用实例解析

    Spring TaskScheduler使用实例解析

    这篇文章主要介绍了Spring TaskScheduler使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java实现经典游戏飞机大战-I的示例代码

    Java实现经典游戏飞机大战-I的示例代码

    《飞机大战-I》是一款融合了街机、竞技等多种元素的经典射击手游。本文将利用java语言实现这游戏,文中采用了swing技术进行了界面化处理,感兴趣的可以了解一下
    2022-02-02
  • 基于HashMap遍历和使用方法(详解)

    基于HashMap遍历和使用方法(详解)

    下面小编就为大家带来一篇基于HashMap遍历和使用方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 通过第三方接口发送短信验证码/短信通知(推荐)

    通过第三方接口发送短信验证码/短信通知(推荐)

    这篇文章主要介绍了通过第三方接口发送短信验证码/短信通知(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • Java Set集合的遍历及实现类的比较

    Java Set集合的遍历及实现类的比较

    这篇文章主要介绍了Java Set集合的遍历及实现类的比较的相关资料,需要的朋友可以参考下
    2017-03-03
  • IntelliJ IDEA里找不到javax.servlet的jar包的解决方法

    IntelliJ IDEA里找不到javax.servlet的jar包的解决方法

    这篇文章主要介绍了IntelliJ IDEA里找不到javax.servlet的jar包的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • SpringBoot的启动过程源码详细分析

    SpringBoot的启动过程源码详细分析

    这篇文章主要介绍了SpringBoot的启动过程源码详细分析,SpringBoot启动的时候,会构造一个SpringApplication的实例,构造SpringApplication的时候会进行初始化的工作,需要的朋友可以参考下
    2023-11-11

最新评论