本文主要介绍linux下zip解压下来乱码以及普通文本类文件的乱码问题。
主要是系统之间编码方法不同导致的linux学习论坛,国外windows文件名编码方法通常是gbklinux是什么系统,而Linux默认是utf-8,这样才会造成在windows的文件在Linux下边显示乱码。
1.zip文件解压下来乱码1.1unzip支持-O选项
若果系统自带的unzip支持-O选项linux文件乱码,则直接使用以下命令即可,这样最便捷简单,但是debianstable版本自带的就不支持。
unzip -O GBK you_zip_file.zip
1.2python脚本
我仅对网上留传的代码更改了一点点。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import zipfile
docs = """usage:
unzippy zip_file.zip [dest_path]
It needs at least one arguments.
zip_file.zip:
The file needs to be unzipped.
dest_path:
The path you want to extract files.It's default value is current path.
"""
if len(sys.argv) == 3:
zip_file = sys.argv[1]
dest_path = os.path.join(os.path.abspath('.'), sys.argv[2])
elif len(sys.argv) == 2:
zip_file = sys.argv[1]
dest_path = os.path.abspath('.')
else:
print(docs)
sys.exit()
print "Processing File " + zip_file
file=zipfile.ZipFile(zip_file,"r");
for name in file.namelist():
utf8name=name.decode('gbk')
print "Extracting " + utf8name
pathname = os.path.join(dest_path,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()
print("unzip to %s successfully." % dest_path)
保存为unzippy,之后联通到/usr/bin,并添加可执行权限即可在任意地方使用
sudo mv ./unzippy /usr/bin/
cd /usr/bin/
sudo chmod a+x ./unzippy
之后就可以直接用unzippy你的zip文件要解压下来的路径,其中解压目标路径可选,默认是当前文件夹下。
UPDATEApril14,20162:32PM
这个方式并不完美linux文件乱码,时常遇见问题。
1.37z解压
先设置bash的lang,用7z解压出文件,之后再用convmv转换文件格式是这个方式的主要内容。
sudo apt-get install p7zip-full convmv
LANG=C
7z x zip_file.zip
convmv -f gbk -t utf8 --notest -r your_unzipped_file_floder/
或者先cd到解压好的地方
convmv -f gbk -t utf8 --notest ./*
我用这个方式并没有成功
1.4给unzip打补丁
按照ikohara/dpkg-unzip-iconv上的安装步骤,给unzip打补丁,之后就可以用-O参数了
1.5unar方式
这个最简单省力,默认debian早已安装了额unar,这个工具会手动检查文件的编码,也可以通过-e来指定:
unar file.zip
即可解压出英文文件。
2.文件内容乱码2.1iconv工具
iconv -f gbk -t utf-8 file1 -o file2 # gbk编码转换为utf-8
命令很简单,可以man出指南或则--help看一下。
2.2enca工具
# -L指明文件语言,一般可以省略
enca -L zh_CN file # 检查文件的编码
enca -L zh_CN -x UTF-8 file # 将文件编码转换为"UTF-8"编码
enca -L zh_CN -x UTF-8 file1 file2 # 如果不想覆盖原文件可以这样
Reference
Linux文件乱码-MarshalRUAN-ITeye技术网站
FileRoller/Unzip解压英文Zip文件名乱码