java压缩zip文件中文乱码问题解决方法
通常用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默认使用项目的编码方式,理论上讲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 根据Url把多文件打包成ZIP下载实例
压缩文件代码工具类: public class UrlFilesToZip { private static final Logger logger = LoggerFactory.getLogger(UrlFilesToZip.class); //根据文件链接把文件下载下来并且转成字节码 public byte[] getImageFromURL(String urlPath) { byte[] data = null; InputStream is = null; HttpURLConnec
-
java实现服务器文件打包zip并下载的示例(边打包边下载)
使用该方法,可以即时打包文件,一边打包一边传输,不使用任何的缓存,让用户零等待! 复制代码 代码如下: /** * * mySocket 客户端 Socket * @param file 待打包的文件夹或文件 * @param fileName 打包下载的文件名 * @throws IOException */ private void down(File file, String fileName) throws IOException { OutputStream outputStream
-
Java创建ZIP压缩文件的方法
本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压缩文件夹 * @param sourceDIR 文件夹名称(包含路径) * @param targetZipFile 生成zip文件名 * @author liuxiangwei */ public static void zipDIR(String sourceDIR, String target
-
java解压zip文件示例
若是使用Java自带的压缩工具包来实现解压缩文件到指定文件夹的功能,因为jdk提供的zip只能按UTF-8格式处理,而Windows系统中文件名是以GBK方式编码的,所以如果是解压一个包含中文文件名的zip包,会报非法参数异常,所以要实现解压缩,就得对DeflaterOutputStream.java.InflaterInputStream.java.ZipConstants.java.ZipEntry.java.ZipInputStream.java以及ZipOutputStream.java
-
Java解压zip文件的关键代码
废话不多说了,给大家贴关键代码了,具体代码如下所示: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import o
-
javaweb文件打包批量下载代码
本文实例为大家分享了javaweb文件打包批量下载,供大家参考,具体内容如下 // 批量下载未批改作业 @RequestMapping(value = "/downloadAllHomework", method = RequestMethod.GET) public void downloadAllHomework(HttpSession httpSession, HttpServletRequest request, HttpServletResponse response, St
-
java使用gzip实现文件解压缩示例
复制代码 代码如下: package com.cjonline.foundation.cpe.action; import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.
-
使用java基础类实现zip压缩和zip解压工具类分享
使用java基础类写的一个简单的zip压缩解压工具类 复制代码 代码如下: package sun.net.helper; import java.io.*;import java.util.logging.Logger;import java.util.zip.*; public class ZipUtil { private final static Logger logger = Logger.getLogger(ZipUtil.class.getName()); privat
-
java压缩zip文件中文乱码问题解决方法
通常用java来打包文件生成压缩文件后,有如下两个地方会出现乱码 : 1.内容的中文乱码问题,这个问题网上很多人给出了解决方法,主要有两种方法:一是修改sun的源码:另一个是使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以直接下载使用即可,毫无疑问,选择后者更方便 2.压缩文件注释的中文乱码问题:zos.setComment("中文测试");这个问题网上对
-
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
本文实例讲述了PHP中使用file_get_contents抓取网页中文乱码问题解决方法.分享给大家供大家参考.具体方法如下: file_get_contents函数本来就是一个非常优秀的php自带本地与远程文件操作函数,它可以让我们不花吹挥之力把远程数据直接下载,但我在使用它读取网页时会碰到有些页面是乱码了,这里就来给各位总结具体的解决办法. 根据网上有朋友介绍说原因可能是服务器开了GZIP压缩,下面是用firebug查看我的网站的头信息,Gzip是开了的,请求头信息原始头信息,代码如下: 复
-
JSP出现中文乱码问题解决方法详解
在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码.参数乱码.表单乱码.源文件乱码.下面来逐一解决其中的乱码问题. 一.JSP页面中文乱码 在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码. 先看一个JSP程序: <%@ page language="java" import="java.util.*" %> <html> &
-
Android Studio升级3.6 Build窗口出现中文乱码问题解决方法
前言 最近受疫情影响,很多互联网企业目前才开始慢慢复工,希望这次的疫情没有影响我们码代码的心情. 问题 好的一点,我们的AndroidStudio迎难而上,最近发布了3.6最新版本,不得不说最新版本还是更新了很多地方,但也有出现了一些问题,比如我最近就碰到了这么一个问题,在我升级到了Android Studio3.6以后发现,编译的时候在底部出现的Build窗口中文出现了乱码的问题,代码中没有出现乱码情况,如下图: 这种问题就很头疼了,我先是在File->Settings->File Enco
-
python解压zip包中文乱码解决方法
乱码得原因: 由于ZipFile模块导出遇到中文解码不对,windows上会出现,linux是否会出现不知道没测试过. 解决方式: 1. 搞个文件名引射表(不太方便,少量文件夹套用时候还可以) 2. 修改源码解码格式(不太方便,自己搞了一下,之后报其他错误) 3. 自己写入文件,自己创建文件夹(推荐) 自己创建的写法: with zipfile.ZipFile(file=zip_save_path, mode='r') as zf: # 解压到指定目录,首先创建一个解压目录 os.mkdir(u
-
跨浏览器PHP下载文件名中的中文乱码问题解决方法
本文实例讲述了跨浏览器PHP下载文件名中的中文乱码问题解决方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20",
-
PHP基于curl post实现发送url及相关中文乱码问题解决方法
本文实例讲述了PHP基于curl post实现发送url及相关中文乱码问题解决方法.分享给大家供大家参考,具体如下: 这个问题困扰我几天了,发送的指定网址的url参数,中文总是乱码,指定网址是utf8编码的,我发送的也是utf8编码的.但是还是乱码,开始用的file_get_contents,后来换成curl并在php.ini中开启了php_curl,还是不行,又加了header终于解决.代码如下: $url = 'http://'; //调用接口的平台服务地址 $post_string = a
-
Windows下利用Gvim写PHP产生中文乱码问题解决方法
首先:找出乱码产生的原因. 一直以为是浏览器的原因,结果我在chrome,firefox,IE9里面都出现了乱码,所以浏览器的因素可以排除.为了验证我猜测是Gvim的原因, 我用记事本(note)简单写了一个php文件 复制代码 代码如下: <?php echo "你好"; echo "世界"; ?> 结果没有出现乱码,所以问题就出在Gvim上,这个结论水到渠成. 于是,开始研究Gvim的配置文件(_vimrc), 现在给大家看一下我产生乱码之前的配置(
-
python解决Fedora解压zip时中文乱码的方法
前言 很多时候在windows下压缩文件没问题,但是到了Linux下,出现乱码,很常见.以前在Ubuntu下,用`unzip -O GBK filename.zip` 就可以搞定. 换了Fedora后,暂时没发现乱码的压缩文件.晚上下载一本书的光盘,又碰到了乱码.尝试之前的方法没成功.看了下unzip的help,没-O那个参数了== 刚好找到一个用python解决的办法,分享下. 新建一个`.py`后缀的文件,直接复制粘贴代码: #!/usr/bin/env python # -*- codin
-
windows环境下Mysql中文乱码问题解决方法
最近开发项目中又重新拿起了Mysql,在搭建环境的时候遇到了中文乱码问题.下面我把我的解决方式跟大家分享一下 1.通过show VARIABLES like 'character_%'; 显示出来所有的设置项目.把其中的非UTF8的编码都设置成utf8 设置方式如 : set character_set_server=utf8; 2.去mysql 安装目录下找到my.ini文件.设置里面的latin1为utf8 3.另外如果在Java端通信数据的时候发生了乱码的话就response.setCha
随机推荐
- angularjs实现多张图片上传并预览功能
- angularjs中的e2e测试实例
- 批处理 Set 命令详解 让你理解set命令第1/2页
- IOS 开发之操作图库自定义控制器
- SWT JFace 小制作 文本阅读器
- vue.js中mint-ui框架的使用方法
- 为何XML对Web服务很重要
- 解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
- android端实现验证码随机生成功能
- 求最大子数组之和的方法解析(2种可选)
- asp.net 删除,更新数据库方法
- JavaScript 捕获窗口关闭事件
- 图片格式的JavaScript和CSS速查手册
- php+ajax实现异步上传文件或图片功能
- 如何遍历对象的属性?
- JavaScript实现简单的树形菜单效果
- PHP封装的PDO数据库操作类实例
- JAVA 中实现整句汉字拆分、转换为ASCII实例详解
- 在Linux下编译C或C++程序的教程
- java 中@Deprecated 注解的实例详解