Linux解压乱码
.向系统添加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
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解压乱码的更多相关文章
- Linux与Windows 解压乱码 UTF8BOM读取问题
Linux 与 Windows 文件乱码问题 这几天需要在linux下用CNN跑数据,但是把数据和数据列表list上传到linux下时却出现了不少乱码的问题.将这两天碰到的编码问题简单的总结一下. 1 ...
- Linux解压安装与卸载
linux tar.gz zip 解压缩 压缩命令 linux下安装软件主要有这么几种: 1.自动安装: yum install package 2.用二进制文件安装:rpm -ivh file.rp ...
- linux 解压操作命令
http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0. ...
- Linux解压文件到指定目录
Linux解压文件到指定目录 tar在Linux上是常用的打包.压缩.加压缩工具,他的参数很多,折里仅仅列举常用的压缩与解压缩参数 参数:-c :create 建立压缩档案的参数:-x : 解压缩压缩 ...
- Linux 解压压缩命令
一.概述: 1.压缩命令: 命令格式:tar -zcvf 压缩文件名.tar.gz 被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式:t ...
- linux 解压zip文件
linux 解压zip文件 学习了:https://blog.csdn.net/hbcui1984/article/details/1583796 unzip xx.zip
- Linux解压rar文件
Linux解压rar文件(unrar安装和使用,分卷解压) windows平台很多压缩文档为rar文件,那么怎么做到Linux解压rar文件(unrar安装和使用)? 简单,centos5安装unra ...
- centos下解压rar文件,Linux解压tar.gz和tar.bz2的命令
1.下载:根据主机系统下载合适的版本,当前64为centos系统演示下载: wget http://www.rarlab.com/rar/rarlinux-x64-5.3.0.tar.gz 2.解压安 ...
- Kali Linux解压包命令:
Kali Linux解压包命令: tar.gz格式压缩包: root@kali:~# tar -xzvf 压缩包.tar.gz -C /root/home/Desktop root@kali:~# c ...
随机推荐
- 使用AJAX日历控件,显示某些日期(CalendarExtender)
1. The HTML Markup <div> <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1&q ...
- 【前端】一句命令快速合并压缩 JS、CSS
引用自:一句命令快速合并 JS.CSS 在项目开发环境下,我们会把 JS 代码尽可能模块化,方便管理和修改,这就避免不了会出现一个项目自身 JS 文件数量达到10个或者更多. 而项目上线后,会要求将所 ...
- js 字符串为空
content.replace(/(^\s)|(\s$)/g, "")
- BZOJ 1679: [Usaco2005 Jan]Moo Volume 牛的呼声( )
一开始直接 O( n² ) 暴力..结果就 A 了... USACO 数据是有多弱 = = 先sort , 然后自己再YY一下就能想出来...具体看code --------------------- ...
- 2013 南京邀请赛 K题 yet another end of the world
/** 大意:给定一组x[],y[],z[] 确定有没有两个不同的x[i], x[j] 看是否存在一个ID使得 y[i]<=ID%x[i]<=z[i] y[j]<=ID%x[j]&l ...
- [WPF疑难]Hide me! not close
原文 [WPF疑难]Hide me! not close [WPF疑难]Hide me! not close 周银辉 有朋友遇到这样的一个问 ...
- use utf8
[root@wx03 0724]# cat a2.pl use Encode; my $a=<STDIN>; my $b=encode_utf8('微信'); print "\$ ...
- Uva 11694 Gokigen Naname
基本思路是Dfs: 1. 一个一个格子摆放,以每个各自的左上角的点为基准点代表格子,比如(0,0)代表(0,0)(0,1)(1,0)(1,1)组成的格子,(0,1)代表(0,1)(0,2)(1,1), ...
- 解题报告 HDU1944 S-Nim
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- 11997 - K Smallest Sums(优先队列)
11997 - K Smallest Sums You’re given k arrays, each array has k integers. There are kk ways to pick ...