.向系统添加windows下的字符编码:
sudo vim /var/lib/locales/supported.d/local
添加一下编码:
zh_CN.GBK GBK
zh_CN.GB2312 GB2312

.向系统中文字符添加相应编码
sudo vim /var/lib/locales/supported.d/zh-hans
添加以下编码:
zh_CN.GBK GBK
zh_CN.GB2312 GB2312

.更新系统编码:
sudo locale-gen

.使用unzip命令解压:
unzip -O CP936 xxxx.zip
解决办法一,利用pyton来处理
.vi uzip文件
.复制一下内容(Python)
#!/usr/bin/env python
# -*- coding: utf- -*-
# uzip.py

import os
import sys
import zipfile

print ]

file=zipfile.ZipFile(sys.argv[],"r");
for name in file.namelist():
    utf8name=name.decode('gbk')
    print "Extracting " + utf8name
    pathname = os.path.dirname(utf8name)
    if not os.path.exists(pathname) and pathname!= "":
        os.makedirs(pathname)
    data = file.read(name)
    if not os.path.exists(utf8name):
        fo = open(utf8name, "w")
        fo.write(data)
        fo.close
file.close()
.chmod +x uzip
../uzip xxxx.zip

方法2,通过unzip行命令解压,指定字符集
unzip -O CP936 xxx.zip (用GBK, GB18030也可以)
有趣的是unzip的manual中并无这个选项的说明,unzip –help对这个参数有一行简单的说明。

方法3,在环境变量中,指定unzip参数,总是以指定的字符集显示和解压文件
/etc/environment中加入2行
UNZIP=”-O CP936″
ZIPINFO=”-O CP936″

方法4,采用java的jar命令解压zip包 JAR 解压
jar xvf file.name
7za x your-zip-file.zip
convmv -f GBK -t utf8 --notest -r .

convmv -f gb2312 -t utf8 -r --notest *

:再压缩前,要设置linux模式, 需要使用第三方ant-.jar
  如果是文件目录,则
ZipEntry zipEntry=new ZipEntry(basePath + System.getProperties().getProperty("file.separator"));
zipEntry.setUnixMode();//解决linux乱码

如果是文件,则
ZipEntry zipEntry=new ZipEntry(base);
zipEntry.setUnixMode();//解决linux乱码

然后在输出时强制设置编码:
 ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
                zipFileName));
        out.setEncoding("GBK");//解决linux乱码

全部代码如下: 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

import org.apache.tools.ant.Project;  

import org.apache.tools.ant.taskdefs.Expand;

/**
 * 文件夹压缩,支持win和linux
 * @author wlzhang
 *
 */
public class ZipUtil
{
    /**
     * @param inputFileName
     *            输入一个文件夹
     * @param zipFileName
     *            输出一个压缩文件夹,打包后文件名字
     * @throws Exception
     */
    public static OutputStream zip(String inputFileName, String zipFileName) throws Exception
    {
        return zip(zipFileName, new File(inputFileName));
    }

    private static OutputStream zip(String zipFileName, File inputFile) throws Exception
    {
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
                zipFileName));
        out.setEncoding("UTF-8");//解决linux乱码  根据linux系统的实际编码设置,可以使用命令 vi/etc/sysconfig/i18n 查看linux的系统编码
        zip(out, inputFile, "");
        out.close();
        return out;
    }

    private static void zip(ZipOutputStream out, File f, String base) throws Exception
    {
        if (f.isDirectory())
        { // 判断是否为目录
            File[] fl = f.listFiles();
            // out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));
//            out.putNextEntry(new ZipEntry(base + "/"));
            ZipEntry zipEntry=new ZipEntry(base + System.getProperties().getProperty("file.separator"));
            zipEntry.setUnixMode();//解决linux乱码
            out.putNextEntry(zipEntry);
//            base = base.length() == 0 ? "" : base + "/";
             ? "" : base + System.getProperties().getProperty("file.separator");
            ; i < fl.length; i++)
            {
                zip(out, fl[i], base + fl[i].getName());
            }
        }
        else
        { // 压缩目录中的所有文件
            // out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
            ZipEntry zipEntry=new ZipEntry(base);
            zipEntry.setUnixMode();//解决linux乱码
            out.putNextEntry(zipEntry);
            FileInputStream in = new FileInputStream(f);
            int b;
            )
            {
                out.write(b);
            }
            in.close();
        }
    }

    private static void unzip(String sourceZip,String destDir) throws Exception{  

        try{  

            Project p = new Project();  

            Expand e = new Expand();  

            e.setProject(p);  

            e.setSrc(new File(sourceZip));  

            e.setOverwrite(false);  

            e.setDest(new File(destDir));  

            /* 

            ant下的zip工具默认压缩编码为UTF-8编码, 

            而winRAR软件压缩是用的windows默认的GBK或者GB2312编码
            所以解压缩时要制定编码格式
            */
            e.setEncoding("UTF-8");  //根据linux系统的实际编码设置
            e.execute();
        }catch(Exception e){
            throw e;
        }
    }  

}

Linux解压乱码的更多相关文章

  1. Linux与Windows 解压乱码 UTF8BOM读取问题

    Linux 与 Windows 文件乱码问题 这几天需要在linux下用CNN跑数据,但是把数据和数据列表list上传到linux下时却出现了不少乱码的问题.将这两天碰到的编码问题简单的总结一下. 1 ...

  2. Linux解压安装与卸载

    linux tar.gz zip 解压缩 压缩命令 linux下安装软件主要有这么几种: 1.自动安装: yum install package 2.用二进制文件安装:rpm -ivh file.rp ...

  3. linux 解压操作命令

    http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0. ...

  4. Linux解压文件到指定目录

    Linux解压文件到指定目录 tar在Linux上是常用的打包.压缩.加压缩工具,他的参数很多,折里仅仅列举常用的压缩与解压缩参数 参数:-c :create 建立压缩档案的参数:-x : 解压缩压缩 ...

  5. Linux 解压压缩命令

    一.概述: 1.压缩命令: 命令格式:tar  -zcvf   压缩文件名.tar.gz   被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式:t ...

  6. linux 解压zip文件

    linux 解压zip文件 学习了:https://blog.csdn.net/hbcui1984/article/details/1583796 unzip xx.zip

  7. Linux解压rar文件

    Linux解压rar文件(unrar安装和使用,分卷解压) windows平台很多压缩文档为rar文件,那么怎么做到Linux解压rar文件(unrar安装和使用)? 简单,centos5安装unra ...

  8. centos下解压rar文件,Linux解压tar.gz和tar.bz2的命令

    1.下载:根据主机系统下载合适的版本,当前64为centos系统演示下载: wget http://www.rarlab.com/rar/rarlinux-x64-5.3.0.tar.gz 2.解压安 ...

  9. Kali Linux解压包命令:

    Kali Linux解压包命令: tar.gz格式压缩包: root@kali:~# tar -xzvf 压缩包.tar.gz -C /root/home/Desktop root@kali:~# c ...

随机推荐

  1. ADO.NET基础笔记

    ADO.NET 程序要和数据库交互要通过ADO.NET进行,通过ADO.Net就能在程序中执行SQL了. ADO.Net中提供了对各种不同的数据库的统一操作接口. 连接字符串: 程序通过连接字符串指定 ...

  2. 什么是DNS劫持和DNS污染?

    什么是DNS劫持和DNS污染? http://blogread.cn/it/article/7758?f=weekly 说明 我们知道,某些网络运营商为了某些目的,对 DNS 进行了某些操作,导致使用 ...

  3. Phases of translation

    Phases of translation--翻译阶段 The C++ source file is processed by the compiler as if the following pha ...

  4. android设置按钮按下的不同效果图

    <!-- 按钮设置按下去的不同效果的方式,设置android:background属性, 下面的 button_select实际上是button_select.xml --> <Bu ...

  5. java中printf中用法详解

    目前printf支持以下格式: %c 单个字符 %d 十进制整数 %f 十进制浮点数 %o 八进制数 %s 字符串 %u 无符号十进制数 %x 十六进制数 %% 输出百分号% printf的格式控制的 ...

  6. WPF DataGrid模拟click实现效果

    WPF的DataGrid原生是不支持Click事件的,然而在开发过程中,经常遇到需要实现类似效果的. 举个栗子:表格第一列是一个CheckBox,需要实现功能点击行选中,再点击取消选中. 第一想法是R ...

  7. vagrant 入门3

    创建第一个Vagrant虚拟环境以及工程(续集): (8) Provisioning: 通常情况下Box只做最基本的设置,而不是一次到位的设置好所有的环境.Vagrant通常使用chef或者Puppe ...

  8. poj 1150 The Last Non-zero Digit

    /** 大意: 求A(n,m)的结果中从左到右第一个非零数 思路: 0是由2*5的得到的,所以将n!中的2,5约掉可得(2的数目比5多,最后再考虑进去即可) 那n!中2 的个数怎么求呢? int ge ...

  9. 工程脚本插件方案 - c集成Python基础篇(VC++嵌入Python)

    序: 为什么要集成脚本,怎么在工程中集成Python脚本. 在做比较大型的工程时,一般都会分核心层和业务层.核心层要求实现高效和稳定的基础功能,并提供调用接口供业务层调用的一种标准的框架划分.在实际中 ...

  10. HTML::Entities 编码或解码 HTML 实体的字符串

    <pre name="code" class="html"><pre name="code" class="py ...