精华内容
下载资源
问答
  • 网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void ...将E:\\aaaa\\中文.zip解压到E:\\aaaa\\中文目录下
  • JAVA解压zip包中文乱码

    2016-06-14 17:47:46
    刚开始采用的java.util下的zip包进行解压,发现路径中文乱码,代码如下: /** * 解压文件到指定目录 * * @param zipFile zip文件 * @param descDir 输出目录 * @author lee */ ...

    最近项目需要解析接口过来的日志文件,日志文件采用zip打包方式传递过来,zip包的内的文件名包含中文。

     

    刚开始采用的java.util下的zip包进行解压,发现路径中文乱码,代码如下:

    /**
    	 * 解压文件到指定目录
    	 * 
    	 * @param zipFile zip文件
    	 * @param descDir 输出目录
    	 * @author lee
    	 */
    	@SuppressWarnings("rawtypes")
    	public static void unZipFiles(File zipFile, String descDir)
    			throws IOException {
    		File pathFile = new File(descDir);
    		if (!pathFile.exists()) {
    			pathFile.mkdirs();
    		}
    		ZipFile zip = new ZipFile(zipFile);
    		for (Enumeration entries = zip.entries(); entries.hasMoreElements();) {
    			ZipEntry entry = (ZipEntry) entries.nextElement();
    			String zipEntryName = entry.getName();
    			InputStream in = zip.getInputStream(entry);
    			String outPath = (descDir + zipEntryName).replaceAll("\\*", "/");
    			;
    			// 判断路径是否存在,不存在则创建文件路径
    			File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
    			if (!file.exists()) {
    				file.mkdirs();
    			}
    			// 判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
    			if (new File(outPath).isDirectory()) {
    				continue;
    			}
    			// 输出文件路径信息
    			System.out.println(outPath);
    
    			OutputStream out = new FileOutputStream(outPath);
    			byte[] buf1 = new byte[1024];
    			int len;
    			while ((len = in.read(buf1)) > 0) {
    				out.write(buf1, 0, len);
    			}
    			in.close();
    			out.close();
    		}
    		zip.close();
    	}

     在网上查阅相关资料,java.uil下的zip处理类不包含中文名字的兼容,需要采用ant包下的apache.tools工具进行解析,代码如下:

    import org.apache.commons.io.FileUtils;
    import org.apache.commons.io.IOUtils;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    import org.xml.sax.SAXException;
    
    import java.io.*;
    import java.util.*;
    
    
    public class ZipUtils {
    
      
    
        /**
         * 解析附件zip包
         * @param unZipFileName 解压的zip文件
         * @param outputDirectory 输出目录
         * @throws StrategyException
         */
        public static void unZip(String unZipFileName,String outputDirectory) throws StrategyException {
            FileOutputStream fileOut = null;
            InputStream inputStream = null;
            ZipFile zipFile = null;
            int readedBytes;
            try{
    
                //创建输出目录
                File outputDirFile = new File(outputDirectory);
                if(!outputDirFile.exists()){
                    outputDirFile.mkdir();
                }
    
                if(System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0){
                    zipFile = new ZipFile(unZipFileName,"GBK");
                }else if(System.getProperty("os.name").toLowerCase().indexOf("linux") >= 0){
                    zipFile = new ZipFile(unZipFileName,"UTF-8");
                }
                for(Enumeration entries = zipFile.getEntries();entries.hasMoreElements();){
    
                    ZipEntry entry = (ZipEntry)entries.nextElement();
    
                    File f = new File(outputDirectory + File.separator + entry.getName());
                    f.createNewFile();
    
                    inputStream = zipFile.getInputStream(entry);
                    fileOut = new FileOutputStream(f);
                    byte[] buf = new byte[1024];
                    while(( readedBytes = inputStream.read(buf) ) > 0){
                        fileOut.write(buf , 0 , readedBytes );
                    }
    
                }
            }catch(Exception e){
                e.printStackTrace();
                throw new StrategyException("解析附件失败,请检查压缩包是否损坏!");
            }finally {
                IOUtils.closeQuietly(fileOut);
                IOUtils.closeQuietly(inputStream);
            }
        }
    
    
    }
    

     

    展开全文
  • 使用java压缩也解压zip文件方法,解决中文乱码问题。使用java自带的压缩解压算法,会出现中文乱码问题。使用apache io的zip包,有效解决该问题。Ant的压缩解压,也是使用该类。
  • java解压ZIP 解决中文乱码 (GBK和UTF-8) 本文简书地址 工具使用 : zip4j GitHub : zip4j 版本 : 2.2.8 Maven : <dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j...

    java解压ZIP 解决中文乱码 (GBK和UTF-8)

    本文简书地址

    工具使用 : zip4j

    GitHub : zip4j

    版本 : 2.2.8

    Maven :

    
    <dependency>
        <groupId>net.lingala.zip4j</groupId>
        <artifactId>zip4j</artifactId>
        <version>2.2.8</version>
    </dependency>
    
    

    ZIP解压现状

    ZIP格式在不同平台上使用不同软件压缩,大致结果为两类:
    1. Windows下使用WinRAR、好压、快压、百度压缩等工具压缩的文件
        特点:文件名为GBK编码
    2. 使用Linux、MacOS等系统压缩的zip文件
        特点:文件名为UTF-8编码
    

    过往解决方案

    通过指定解压时的文件名编码类型来解决,最简单粗暴的就是
    
    ZipFile zip = new ZipFile(dest);
    //直接指定GBK,反正大多数人用win操作
    zip.setFileNameCharset("GBK");
    zip.extractAll(Constants.GOODS_ITEM_IMG_PATH);
    
    但是现在用macOS办公的人越来越多,这种写法已经不满足需求了
    

    新解决方案

    通过阅读ZIP的协议文档,我们可以发现,Info-ZIP Unicode Path Extra Field (0x7075)
    这个额外信息可以解决我们的问题,据笔者测试,WinRAR和百度压缩等使用GBK作为文件编码的压缩软件,
    在这个区域会记录文件名的UTF-8编码的名称,但是因为这个字段不是必要字段,文件名使用UTF-8编码的
    MacOS归档、Deepin归档等软件不会填充这个信息。
    

    解决方案代码

         String extractAll(MultipartFile file) throws Exception { 
                String path = RECEIVABLE_SHEET_PATH;
                 if(!new File(path).mkdirs()) {
                     return "上传文件失败,无法创建临时文件夹";
                 }
                 File dest = new File(path + "/"+file.getOriginalFilename());
                 file.transferTo(dest);
        
                 /* 解压 */
                 try {
                    ZipFile zip = new ZipFile(dest);
                    
                    zip.setCharset(Charset.forName("utf-8"));
                     System.out.println("begin unpack zip file....");
                     
                    zip.getFileHeaders().forEach(v->{
                        String extractedFile = getFileNameFromExtraData(v);
                        try {
                            zip.extractFile(v, path,extractedFile);
                        } catch (ZipException e) {
                            System.out.println("解压失败 :"+extractedFile);
                            e.printStackTrace();
                            return;
                        }
                        System.out.println("解压成功 :"+extractedFile);
                    });
                     System.out.println("unpack zip file success");
                } catch (ZipException e) {
                    if(!new File(path).mkdirs())
                        return "解压失败";
                }
                 return "success";
            }
         
          public static String getFileNameFromExtraData(FileHeader fileHeader) {
                  if(fileHeader.getExtraDataRecords()!=null){
                      for (ExtraDataRecord extraDataRecord : fileHeader.getExtraDataRecords()) {
                          long identifier = extraDataRecord.getHeader();
                          if (identifier == 0x7075) {
                              byte[] bytes = extraDataRecord.getData();
                              ByteBuffer buffer = ByteBuffer.wrap(bytes);
                              byte version = buffer.get();
                              assert (version == 1);
                              int crc32 = buffer.getInt();
                              System.out.println("使用:fileHeader.getExtraDataRecords() ");
                              return new String(bytes, 5, buffer.remaining(), StandardCharsets.UTF_8);
                          }
                      }
                  }
                  System.out.println("使用:fileHeader.getFileName()");
                  return fileHeader.getFileName();
              }
    
    

    参考ZIP规范资料

    Third party mappings commonly used are:

           0x07c8        Macintosh
           0x2605        ZipIt Macintosh
           0x2705        ZipIt Macintosh 1.3.5+
           0x2805        ZipIt Macintosh 1.3.5+
           0x334d        Info-ZIP Macintosh
           0x4341        Acorn/SparkFS
           0x4453        Windows NT security descriptor (binary ACL)
           0x4704        VM/CMS
           0x470f        MVS
           0x4b46        FWKCS MD5 (see below)
           0x4c41        OS/2 access control list (text ACL)
           0x4d49        Info-ZIP OpenVMS
           0x4f4c        Xceed original location extra field
           0x5356        AOS/VS (ACL)
           0x5455        extended timestamp
           0x554e        Xceed unicode extra field
           0x5855        Info-ZIP UNIX (original, also OS/2, NT, etc)
           0x6375        Info-ZIP Unicode Comment Extra Field
           0x6542        BeOS/BeBox
           0x7075        Info-ZIP Unicode Path Extra Field
           0x756e        ASi UNIX
           0x7855        Info-ZIP UNIX (new)
           0xa220        Microsoft Open Packaging Growth Hint
           0xfd4a        SMS/QDOS
    

    -Info-ZIP Unicode Path Extra Field (0x7075):

           Stores the UTF-8 version of the file name field as stored in the
           local header and central directory header. (Last Revision 20070912)
    
           Value         Size        Description
           -----         ----        -----------
           (UPath) 0x7075        Short       tag for this extra block type ("up")
           TSize         Short       total data size for this block
           Version       1 byte      version of this extra field, currently 1
           NameCRC32     4 bytes     File Name Field CRC32 Checksum
           UnicodeName   Variable    UTF-8 version of the entry File Name
    
           Currently Version is set to the number 1.  If there is a need
           to change this field, the version will be incremented.  Changes
           may not be backward compatible so this extra field should not be
           used if the version is not recognized.
    
           The NameCRC32 is the standard zip CRC32 checksum of the File Name
           field in the header.  This is used to verify that the header
           File Name field has not changed since the Unicode Path extra field
           was created.  This can happen if a utility renames the File Name but
           does not update the UTF-8 path extra field.  If the CRC check fails,
           this UTF-8 Path Extra Field should be ignored and the File Name field
           in the header should be used instead.
    
           The UnicodeName is the UTF-8 version of the contents of the File Name
           field in the header.  As UnicodeName is defined to be UTF-8, no UTF-8
           byte order mark (BOM) is used.  The length of this field is determined
           by subtracting the size of the previous fields from TSize.  If both
           the File Name and Comment fields are UTF-8, the new General Purpose
           Bit Flag, bit 11 (Language encoding flag (EFS)), can be used to
           indicate that both the header File Name and Comment fields are UTF-8
           and, in this case, the Unicode Path and Unicode Comment extra fields
           are not needed and should not be created.  Note that, for backward
           compatibility, bit 11 should only be used if the native character set
           of the paths and comments being zipped up are already in UTF-8. It is
           expected that the same file name storage method, either general
           purpose bit 11 or extra fields, be used in both the Local and Central
           Directory Header for a file.
    

    参考文献

    unzip not correct with cjk filename. #45

    Garbled chinese character #73

    展开全文
  • 可以设置编码的压缩 和 解压 防止乱码文件名的产生 可能根据不同系统会有不同的编码格式, 我的是win7 所以用的GB2312或者GBK XP如果有问题换成utf-8 package com.util.export; import java.io.File; ...
    用的apache的 ant包 
    可以设置编码的压缩 和 解压
    防止乱码文件名的产生
    可能根据不同系统会有不同的编码格式,
    我的是win7  所以用的GB2312或者GBK
    XP如果有问题换成utf-8


    package com.util.export;

    import java.io.File;
    import java.io.FileInputStream;
    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 org.apache.tools.zip.ZipOutputStream;

    public class OperationZip {

        
        public static void ZIP(String sourcePath, String zipFileName)
                throws IOException {
            ZipOutputStream zos = new ZipOutputStream(new File(zipFileName));
            // 设置压缩的时候文件名编码为gb2312
            zos.setEncoding("gb2312");
            File file = new File(sourcePath);
            if (file.isDirectory()) {
                // 此处使用/来表示目录,如果使用\\来表示目录的话,有可能导致压缩后的文件目录组织形式在解压缩的时候不能正确识别。
                ZIPDIR(sourcePath, zos, file.getName() + "/");
            } else {
                // 如果直接压缩文件
                ZIPDIR(file.getPath(), zos, new File(file.getParent()).getName() + "/");
                ZIPFile(file.getPath(), zos, new File(file.getParent()).getName() + "/" + file.getName());
            }
            zos.closeEntry();
            zos.close();
        }

        
        public static void ZIPDIR(String sourceDir, ZipOutputStream zos,String tager) throws IOException {
            // System.out.println(tager);
            ZipEntry ze = new ZipEntry(tager);
            zos.putNextEntry(ze);
            // 提取要压缩的文件夹中的所有文件
            File f = new File(sourceDir);
            File[] flist = f.listFiles();
            if (flist != null) {
            // 如果该文件夹下有文件则提取所有的文件进行压缩
                for (File fsub : flist) {
                    if (fsub.isDirectory()) {
                        // 如果是目录则进行目录压缩
                        ZIPDIR(fsub.getPath(), zos, tager + fsub.getName() + "/");
                    }else{
                        // 如果是文件,则进行文件压缩
                        ZIPFile(fsub.getPath(), zos, tager + fsub.getName());
                    }
                }
            }
        }

        
        public static void ZIPFile(String sourceFileName, ZipOutputStream zos,String tager) throws IOException {
             // System.out.println(tager);
             ZipEntry ze = new ZipEntry(tager);
             zos.putNextEntry(ze);
             // 读取要压缩文件并将其添加到压缩文件中
             FileInputStream fis = new FileInputStream(new File(sourceFileName));
             byte[] bf = new byte[2048];
             int location = 0;
             while ((location = fis.read(bf)) != -1) {
                 zos.write(bf, 0, location);
             }
             fis.close();
        }
        
        
        @SuppressWarnings("unchecked")
        public static void UnZIP(String sourceFileName, String desDir) throws IOException {
            // 创建压缩文件对象
            ZipFile zf = new ZipFile(new File(sourceFileName),"GB2312");
            // 获取压缩文件中的文件枚举
            Enumeration en = zf.getEntries();
            int length = 0;
            byte[] b = new byte[1024];
            // 提取压缩文件夹中的所有压缩实例对象
            while (en.hasMoreElements()) {
                ZipEntry ze = en.nextElement();
                // System.out.println("压缩文件夹中的内容:"+ze.getName());
                // System.out.println("是否是文件夹:"+ze.isDirectory());
                // 创建解压缩后的文件实例对象
                File f = new File(desDir + ze.getName());
                // System.out.println("解压后的内容:"+f.getPath());
                // System.out.println("是否是文件夹:"+f.isDirectory());
                // 如果当前压缩文件中的实例对象是文件夹就在解压缩后的文件夹中创建该文件夹
                if (f.isDirectory()) {
                    f.mkdirs();
                } else {
                    // 如果当前解压缩文件的父级文件夹没有创建的话,则创建好父级文件夹
                    if (!f.getParentFile().exists()) {
                        f.getParentFile().mkdirs();
                    }
                    // 将当前文件的内容写入解压后的文件夹中。
                    FileOutputStream  outputStream = new FileOutputStream(f);
                    InputStream inputStream = zf.getInputStream(ze);
                    while ((length = inputStream.read(b)) > 0){
                        outputStream.write(b, 0, length);
                    }
                    inputStream.close();
                    outputStream.close();
                }
            }
            zf.close();
        }
        
        
        public static void main(String[] args) {
            try {
    //            ZIP("F:/sh360","E:/带动.zip");
    //            UnZIP("E:/带动.zip","c:/BBBBBB/");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    展开全文
  • java zip解压

    2021-06-05 15:46:07
    前言:zip解压Windows默认是GBK,Mac默认是UTF-8,为了保证都可以解压,就需要根据不同 的文件设置不同的编码格式,本文解决方案是根据是否乱码来判断(详见下文)

    前言:zip解压Windows默认是GBK,Mac默认是UTF-8,为了保证都可以解压,就需要根据不同               的文件设置不同的编码格式,本文解决方案是根据是否乱码来判断(详见下文)

               如果解压过程中不需要操作文件请看方法一(三行解压到本地),如果解压过程中需要操               作文件如网盘中实现在线解压,基本实现设想就是边解压,边创建文件夹(或上传文件)               到网盘数据库

                注:两种方法均引用与其他博客,但由于找不到原文地址了,忘有知道的兄弟留言告知,                     及时加注上

    方法一:

    maven配置:

            <dependency>
                <groupId>net.lingala.zip4j</groupId>
                <artifactId>zip4j</artifactId>
                <version>1.3.2</version>
            </dependency>

    代码:

    package com.gxs.test.util;
    
    
    import net.lingala.zip4j.core.ZipFile;
    import net.lingala.zip4j.model.FileHeader;
    import java.util.List;
    
    /**
     * 已解决乱码问题
     */
    public class UnZipFiles {
    
        public static void unZip(String zipPath, String destDir) throws Exception {
            ZipFile zipFile = new ZipFile(zipPath);
            zipFile.setFileNameCharset(getEncoding(zipPath));
            zipFile.extractAll(destDir);
        }
    
        @SuppressWarnings("unchecked")
        private static String getEncoding(String path) throws Exception {
            String encoding = "GBK";
            ZipFile zipFile = new ZipFile(path);
            zipFile.setFileNameCharset(encoding);
            List<FileHeader> list = zipFile.getFileHeaders();
            for (int i = 0; i < list.size(); i++) {
                FileHeader fileHeader = list.get(i);
                String fileName = fileHeader.getFileName();
                if (isMessyCode(fileName)) {
                    encoding = "UTF-8";
                    break;
                }
            }
            return encoding;
        }
    
        private static boolean isMessyCode(String str) {
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                // 当从Unicode编码向某个字符集转换时,如果在该字符集中没有对应的编码,则得到0x3f(即问号字符?)
                // 从其他字符集向Unicode编码转换时,如果这个二进制数在该字符集中没有标识任何的字符,则得到的结果是0xfffd
                if ((int) c == 0xfffd) {
                    // 存在乱码
                    return true;
                }
            }
            return false;
        }
    
    
    
        public static void main(String[] args){
            /**
             * 解压文件
             */
            String zipFile = "E:\\ziptest\\测试1级目录.zip";
            String path = "E:\\ziptest";
            try {
                unZip(zipFile, path);
            } catch (Exception e) {
                e.printStackTrace();
            }
            ;
    
        }
    }
    
    
    

     

    方法二:

    代码:

    package com.gxs.test.util;
    
    import org.springframework.stereotype.Component;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.nio.charset.Charset;
    import java.util.zip.CRC32;
    import java.util.zip.CheckedInputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    
    /**
     * zip压缩工具类
     *  @className: UnzipUtils
     *  @author: gxs
     *  @date: 2021/6/5 9:13
     *  @version: 1.0
     */
    @Component
    public class UnzipUtil {
    
        private static final int BUFFER = 1024;
        private static final String CODING_UTF8 = "UTF-8";
        private static final String CODING_GBK = "GBK";
    
        /**
         * 解压入口方法
         *
         * @param zipPath zip文件物理地址
         * @param unzipPath 解压后存放路径
         * @throws Exception
         */
        public static void decompress(String zipPath, String unzipPath)  throws Exception {
            //解压缩执行方法
            decompressFile(new File(zipPath), new File(unzipPath));
        }
    
        /**
         * 解压缩执行方法
         *
         * @param srcFile 压缩文件File实体
         * @param destFile 解压路径File实体
         * @throws Exception
         */
        public static void decompressFile(File srcFile, File destFile) throws Exception {
            //创建数据输入流
            CheckedInputStream cis = new CheckedInputStream(new FileInputStream(srcFile), new CRC32());
            //创建压缩输入流
            ZipInputStream zis = new ZipInputStream(cis, Charset.forName(CODING_UTF8));
            //异常捕获的方式判断编码格式
            try {
                //判断代码,如果此代码未抛出异常,则表示编码为UTF-8
                zis.getNextEntry().getName();
            } catch (Exception e) {
                //如果乱码会抛异常,抛异常重新创建输入流,重新设置编码格式
                cis = new CheckedInputStream(new FileInputStream(srcFile), new CRC32());
                zis = new ZipInputStream(cis, Charset.forName(CODING_GBK));
            }
            //解压zip
            decompressZis(destFile, zis);
            //关闭流
            zis.close();
    
        }
    
        /**
         * 文件 解压缩执行方法
         *
         * @param destFile 目标文件
         * @param zis ZipInputStream
         * @throws Exception
         */
        private static void decompressZis(File destFile, ZipInputStream zis)   throws Exception {
            ZipEntry entry;
            while ((entry = zis.getNextEntry()) != null) {
                //获取当前的ZIP条目路径
                String dir = destFile.getPath() + File.separator + entry.getName();
                File dirFile = new File(dir);
                //递归检查文件路径,路径上没有文件夹则创建,保证整条路径在本地存在
                fileProber(dirFile);
                //判断是否是文件夹
                if (entry.isDirectory()) {
                    //如果是,创建文件夹
                    dirFile.mkdirs();
                    System.out.println(dirFile.getName());
                } else {
                    //如果不是文件夹,数据流输出,生成文件
                    decompressFile(dirFile, zis);
                }
                //关闭当前的ZIP条目并定位流
                zis.closeEntry();
            }
        }
    
        /**
         * 文件探针,当父目录不存在时,创建目录
         * 
         * @param dirFile ZIP条目路径
         */
        private static void fileProber(File dirFile) {
            //获取此路径的父目录
            File parentFile = dirFile.getParentFile();
            //判断是否存在
            if (!parentFile.exists()) {
                // 递归寻找上级目录
                fileProber(parentFile);
                //直至存在,递归执行创建文件夹
                parentFile.mkdir();
            }
    
        }
    
        /**
         * 生成文件
         * 
         * @param destFile 目标文件
         * @param zis ZipInputStream
         * @throws Exception
         */
        private static void decompressFile(File destFile, ZipInputStream zis) throws Exception {
            //创建输出流
            BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(destFile));
            //转成byte数组
            int count;
            byte[] data = new byte[BUFFER];
            //读取并写入文件
            while ((count = zis.read(data, 0, BUFFER)) != -1) {
                bos.write(data, 0, count);
            }
            //关闭数据流
            bos.close();
        }
    
        public static void main(String[] args){
            try {
                decompress("E:\\ziptest\\测试1级目录.zip", "E:\\ziptest\\");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

     

    展开全文
  • 在本机下载解压以后没有问题, 发布到服务器以后解压却变成编码以后的。 ZipOutputStream zipTempFile = null; 后来查了一下 发现可以编码但是引入的包要Apache下的 zipTempFile.setEncoding("gbk");//要引用...
  • 使用zip4j 完美解决 官网下载地址:http://www.lingala.net/zip4j/download.php 或使用maven配置 <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId>
  • java解压zip和rar并解决乱码问题

    千次阅读 2018-08-31 18:52:50
    1.java解压zip格式的文件比较简单,直接上代码 ​ /** * 解压zpi文件 * @param zipPath * @param descDir * @return 返回解压之后的文件名称集合 * @throws IOException */ public static List&...
  • linux下zip解压乱码问题的解决

    千次阅读 热门讨论 2018-01-07 22:04:05
    由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip的官方网站没有把自动识别编码列入计划,可能他们不认为这是个问题。...
  • 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时出现乱码问题,因为Linux下的默认编码是UTF8。 解决方案一 使用7z解压。 安装p7zip和convmv ...
  • java解压乱码

    2013-07-30 17:47:30
    java.util.zip.ZipFile来解压zip文件,今天发现程序在读取解压文件时居然报了空指针异常,debug程序后发现时读取不到文件,产生原先是zip压缩文件中含有中文的名称,读取文件名为乱码, 报找不到文件名,所以报了空...
  • Java自带的util的ZipFile解压含有中文名文件的zip乱码和报错,因zip压缩编码不同导致;windows压缩一般是GBK编码,mac os和linux一般编码是utf-8,用java.util.zip.ZipFile不好统一解压编码.改成使用org.apache.tools....
  • Java解压zip有时会导致乱码,是应为zip缺陷,没有指定编码,windows中文环境下为GBK,日文环境下是JIS,linux编码为UTF-8,而Java使用UTF-8,Java默认的ZipFile也不能指定编码,每次为了兼容不得不去依赖Ant,但是只...
  • 场景:解压xxxx.zip文件(如果zip文件里面嵌套zip,市面上工具基本不支持,自己写个递归方法即可),中文文件名出现乱码 工具:zip4j(默认编码集UTF-8) 乱码原因: ZIP格式在不同平台上使用不同软件压缩: 1...
  • Java解压zip 解决编码和中文乱码问题

    千次阅读 2020-04-27 17:19:56
    项目由GBK转成UTF-8 遇到原有解析zip发现中文文件名称乱码问题 <!--pom包--> <dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <...
  • C:\\Users\\Joue\\Desktop\\unzip.zip"; String destDir ="C:\\Users\\Joue\\Desktop\\unzip";  ZipFile zipFile = new ZipFile(zipFilePath); //此处可自动识别编码  Enumeration&lt;?&...
  • 对于Java本身,很多功能都会遭到大家的质疑,但是真的是Java本身做的不好么? 我想应该不是的。 对于Java自身自带的压缩文件操作来说,最大的弊端应该就是对中文的不支持,所以很多人都会去选择apache公司提供的。...
  • 使用java自带的zip包压缩、解压文件/文件夹。显示进度。在windows XP SP3 + jdk1.7下测试不存在中文路径乱码问题。import java.io.*;import java.util.zip.*;public class Zip {int filesCount;//总数量int now;//已...
  • 压缩文档: java -jar spanner.jar zip <path> 解压文档: java -jar spanner.jar unzip <file> 查看apk信息: java -jar apk 查看apk包名: java -jar info | file> 查看MD5:  java -jar md5 解压缩文档主要解决在...
  • 原文转载自:...   package zip; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream;...
  • linux 解压zip中文乱码问题 linux 使用unzip 解压是,出现乱码问题,运行了java 程序解决了这个问题,如果有很好的方法,请在此告知,谢谢! 方法一:使用Java 方法二:使用python
  • 主要介绍了java压缩zip文件中文乱码问题的解决方法,需要的朋友可以参考下
  • java zip压缩解压

    千次阅读 2012-07-12 12:22:55
    使用java自带的zip包压缩、解压文件/文件夹。显示进度。在windows XP SP3 + jdk1.7下测试不存在中文路径乱码问题。 import java.io.*; import java.util.zip.*; public class Zip { int filesCount;//总数量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,463
精华内容 2,985
热门标签
关键字:

javazip解压乱码

java 订阅