大家上午好啊!今天咱們來聊聊Linux 下 zip 文件解壓亂碼怎麼解決的那些事!
由於zip格式中並沒有指定編碼格式,Windows下生成的zip文件中的編碼是GBK/GB2312等,因此,導致這些zip文件在Linux下解壓時出現亂碼問題,因為Linux下的默認編碼是UTF8。
目前網上流傳一種unzip -O cp936的方法,但一些unzip是沒有-O這個選項的。
版本 unzip 6.0 debian modified 有這個選項
還有另外兩種解決方案可用。
python方案
此方案目前來看非常完美。
#!/usr/bin/env python# -*- coding: utf-8 -*-
import osimport sysimport zipfile
#print "Processing File " + sys.argv[1]
file=zipfile.ZipFile(sys.argv[1],"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.closefile.close()
Windows 用戶屏蔽兩條 print 語句,Linux 用戶不用屏蔽
7z方案
需要安裝p7zip和convmv,在Fedora下的命令是
su -c 'yum install p7zip convmv'
在ubuntu下的安裝命令是
sudo apt-get install p7zip convmv
安裝完之後,就可以用7za和convmv兩個命令完成解壓縮任務。
LANG=C 7za x your-zip-file.zip
convmv -f GBK -t utf8 --notest -r .
第一條命令用於解壓縮,而LANG=C表示以US-ASCII這樣的編碼輸出文件名,如果沒有這個語言設置,它同樣會輸出亂碼,只不過是UTF8格式的亂碼(convmv會忽略這樣的亂碼)。
第二條命令是將GBK編碼的文件名轉化為UTF8編碼,-r表示遞歸訪問目錄,即對當前目錄中所有文件進行轉換。
根據 GitHub - ikohara/dpkg-unzip-iconv: Makefile for Debian unzip package with iconv 上的安裝步驟,給unzip打補丁,然後就可以用-O參數了
1.5 unar方法
這個最簡單省力,默認debian已經安裝了額unar,這個工具會自動檢測文件的編碼,也可以通過-e來指定:
unar file.zip
即可解壓出中文文件。
更多精彩內容詳情關注尚學堂,喜歡IT的小夥伴們可以瞭解尚學堂哦!另外,喜歡的話請多多關注小編哦!
閱讀更多 Java雜談 的文章