CentOS上解压ZIP乱码的解决办法
今天在学校做实验需要解压缩一些范例程序,我准备在我的电脑上把这个实验做完,所以就把文件copy到我的CentOS里面去了。
但是万万没想到``````解压缩的时候悲剧了,用unzip解压出来一大堆乱码文件,只要是中文的名称全都是乱码。
我当时查了无数博客,论坛,无外乎两个办法:
1.用 unzip -O utf-8
但是-O这个命令老早就没了啊大哥!麻烦你们复制粘帖的时候自己实践下好吗!
2.用7zip
这个靠谱,我用"7z x xxx.zip"成功的解压出来了``````````另外一堆乱码。当时真的是欲哭无泪啊,又找了十几二十页谷姐度娘,才找到一位神人的解决方法,亲测可行,在这里我记录一下时间:2014 4 14 CentOS6.5.
步骤:
(1).先用“7z x xxx.zip”解压你的zip文件,然后,把有乱码的文件和文件夹移动到另外一个文件夹
(2).在shell里面键入命令"convmv -r -f utf8 -t iso88591 * --notest --nosmart && convmv -r -f gbk -t utf8 * --notest --nosmart"
从此,世界安静了````````中文啊!你会发现那万恶的乱码君消失在你的屏幕里。
这里先mark一下解决方法的网址:http://forum.ubuntu.org.cn/viewtopic.php?t=261811
再把文章转载一下方便查看:
本地化问题对我这种菜鸟来说就等于解决各种各样的乱码,而文件名乱码是最惹人眼烦的。
本着自己以后方面查,大家来拍砖的想法,现在小结一些:
一、“GBK乱码”,参考 http://forum.ubuntu.com.cn/viewtopic.php?f=35&t=213575&start=0
乱码的样子类似:
°²Àï¿ü ÒÁ¸ñÀ³Ï£ÑÇ˹,°²Àï¿ü ÒÁ¸ñÀ³Ï£ÑÇ˹
解决方法:
1.使用convmv
把乱码文件名文件复制在一个空目录里运行(这样错了也不怕):
convmv -r -f utf8 -t iso88591 * --notest --nosmart && convmv -r -f gbk -t utf8 * --notest --nosmart
2.以前有人建议在 /etc/environment 里添加
env LANG=zh_CN.GBK firefox
,但我不明白为何我这里收效甚微。
二、.“ascii乱码”参考 http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=244095&view=previous
乱码的样子类似:
%E5%8C%BB%E4%BF%9D
解决方法:
1.使用uni2ascii
echo 乱码原文 | ascii2uni -a J
2.安装nautilus-filename-repairer0.06(官方有源码,但是依赖问题,我还没安装成功,而0.05版与现在的nautilus有点小小的合作障碍,只能看不能改名)
3.用chromeplus-1.3.3.1下载(因为这类乱码主要在用ff(默认utf8)下载qq群里的文件之后产生,用chromeplus(默认GBK)下就没问题了)
另外,至于文件里面内容的乱码问题可以搜索enca

1.向系统添加windows下的字符编码: sudo vim /var/lib/locales/supported.d/local 添加一下编码: zh_CN.GBK GBK zh_CN.GB2312 GB2312 2.向系统中文字符添加相应编码 sudo vim /var/lib/locales/supported.d/zh-hans 添加以下编码: zh_CN.GBK GBK zh_CN.GB2312 GB2312 3.更新系统编码: sudo locale-gen 4.使用unzip命令解压: unzip -O CP936 xxxx.zip


解决办法一,利用pyton来处理 1.vi /opt/uzip/uzip.py文件 2.复制一下内容(Python) #!/usr/bin/env python # -*- coding: utf-8 -*- # uzip.py import os import sys import zipfile print "Processing File " + sys.argv[1] file=zipfile.ZipFile(sys.argv[1],"r"); for name in file.namelist(): utf8name=name.decode('gb18030')#比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() 3.chmod +x /opt/opt/uzip.py4.vi /usr/bin/uzip #!/bin/bash /opt/uzip/uzip.py $1 5.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


1:再压缩前,要设置linux模式, 需要使用第三方ant-1.6.5.jar 如果是文件目录,则 ZipEntry zipEntry=new ZipEntry(basePath + System.getProperties().getProperty("file.separator")); zipEntry.setUnixMode(755);//解决linux乱码 如果是文件,则 ZipEntry zipEntry=new ZipEntry(base); zipEntry.setUnixMode(644);//解决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(755);//解决linux乱码 out.putNextEntry(zipEntry); // base = base.length() == 0 ? "" : base + "/"; base = base.length() == 0 ? "" : base + System.getProperties().getProperty("file.separator"); for (int i = 0; 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(644);//解决linux乱码 out.putNextEntry(zipEntry); FileInputStream in = new FileInputStream(f); int b; while ((b = in.read()) != -1) { 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; } } }

CentOS上解压ZIP乱码的解决办法的更多相关文章
- linux中文显示乱码的解决办法
linux中文显示乱码的解决办法 linux中文显示乱码是一件让人很头疼的事情. linux中文显示乱码的解决办法:[root@kk]#vi /etc/sysconfig/i18n将文件中的内容修改为 ...
- .NET在IE9中页面间URL传递中文变成乱码的解决办法
在.Net的项目中,鼠标点击查询按钮,转到查询页面,但URL中包含中文时,传到服务器端后,中文变成了乱码(只有IE9出现该问题). 尝试使用Server.UrlEncode()进行编码, ...
- vsftp在REDHAT,CENTOS 5中登录慢的解决办法
vsftp在REDHAT,CENTOS 5中登录慢的解决办法 vsftp在REDHAT,CENTOS 5中不仅登录慢,至少花30秒左右,而且上传文件的速度也受影响, 经过摸索,根本原因在DNS解析上花 ...
- C#中WebClient使用DownloadString中文乱码的解决办法
原文:C#中WebClient中文乱码的解决办法 第一次尝试: string question = textBox1.Text.ToString(); WebClient client= new We ...
- 通过virtualbox最小化安装centos 6.3后无法上网解决办法
通过virtualbox最小化安装centos 6.3后无法上网解决办法 1.设置virtualbox的网络连接方式,如下图使用桥接方式,桥接的网卡为宿主正在上网的网卡,现在我是通过无线来上网的,所以 ...
- request.getParameter()获取URL中文参数乱码的解决办法
这个问题耽误好长时间,URL传中文参数出现乱码,就算首次使用request接收就添加 request.setCharacterEncoding("UTf-8"); 依然报错不误. ...
- 导出CSV格式文件,用Excel打开乱码的解决办法
导出CSV格式文件,用Excel打开乱码的解决办法 1.治标不治本的办法 将导出CSV数据文件用记事本打开,然后另存为"ANSI"编码格式,再用Excel打开,乱码解决. 但是,这 ...
- 详解get请求和post请求参数中文乱码的解决办法
首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解 ...
- 【转】windows 控制台cmd乱码的解决办法
windows 控制台cmd乱码的解决办法 我本机的系统环境: OS Name: Microsoft Windows 10 企业版 OS Version: 10.0.14393 N/A Build 1 ...
随机推荐
- javascript笔记整理(数组对象)
1.属性 a.length--设置或返回数组元素的数目 var a=[1,2,3,45,5]; alert(a.length=6) 结果:6 alert(a[5]) 结果:undefined b.co ...
- Android UI 之WaterFall瀑布流效果
所谓瀑布流效果,简单说就是宽度相同但是高度不同的一大堆图片,分成几列,然后像水流一样向下排列,并随着用户的上下滑动自动加载更多的图片内容. 语言描述比较抽象,具体效果看下面的截图: ...
- 基于visual Studio2013解决C语言竞赛题之1012连接字符串
题目 解决代码及点评 /* 编写一个函数JOIN,让它实现字符串连接运算功能. */ #include <stdio.h> #include <stdl ...
- Java ArrayList add(int index, E element) example
Simple add() method is used for adding an element at the end of the list however there is another va ...
- 手机端viewport的设置规范
<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale ...
- arm-linux-gcc下载与安装
在RHEL 5平台上安装配置arm-linux-gcc 2011-02-23 19:35:40| 分类: 嵌入式开发环境 | 标签: |字号大中小 订阅 . 在linux平台上安装好的基础上,开 ...
- FORM验证简单demo
详解稍后加入. 项目结构如图: web.xml <?xml version="1.0" encoding="UTF-8" ?> <web-ap ...
- 译文:前端性能的重要性 The Importance of Frontend Performance
欢迎訪问我的主页.最新的文章我会首先公布在个人主页上: http://blog.guaidm.com/shocky/ 原书下载地址:http://pan.baidu.com/s/1pJocRwB 在我 ...
- TEXT文本编辑框4 点击按钮读取文本框内容到内表
*&---------------------------------------------------------------------* *& Report ZTEST_CWB ...
- asp.net iis URLRewrite 实现方法详解
原文 asp.net iis URLRewrite 实现方法详解 实现非常简单首先你要在你的项目里引用两个dll:actionlessform.dll.urlrewriter.dll,真正实现重写的是 ...