Linux 下 zip 文件解壓亂碼如何解決?

大家上午好啊!今天咱們來聊聊Linux 下 zip 文件解壓亂碼怎麼解決的那些事!

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 用戶不用屏蔽

Linux 下 zip 文件解壓亂碼如何解決?

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的小夥伴們可以瞭解尚學堂哦!另外,喜歡的話請多多關注小編哦!

Linux 下 zip 文件解壓亂碼如何解決?


分享到:


相關文章: