1. linux中unzip解壓時中文亂碼如何解決
更改源碼解決亂碼
調試發現問題出現在MultiByteToWideChar方法里,
如 MultiByteToWideChar(CP_ACP,0,fn,-1,tfn,MAX_PATH); 到這里時fn中的name屬性值還是正常的,在這個方法內部執行完tfn就亂了。
解決方法:
打開unzip.cpp源文件,找到函數
ZRESULT TUnzip::Get(int index,ZIPENTRY *ze)
{ // ......
// ......} 12345
這個函數里有
#ifdef UNICODE
MultiByteToWideChar(CP_UTF8,0,fn,-1,tfn,MAX_PATH);#else
strcpy(tfn,fn);#endif12345
把 CP_UTF8 改為CP_ACP, ( CP_ACP 指示要使用當前設置的 API 默認 Windows ANSI 代碼頁)
重新編譯後
這樣就解決了解壓中文文件名稱亂碼的問題
編譯時解決源碼問題(無需更改源碼)
上面的情況,我們我觀察到unzip源代碼這段開始的地方有判斷
#ifndef Ext_ASCII_TO_Native 1
這樣問題似乎更簡單了,不用改源代碼,只需在make時定義 Ext_ASCII_TO_Native 即可,這樣 Ext_ASCII_TO_Native 實際為一個空的宏,不進行任何轉換操作。
比如,使用下面的方法編譯
make -DExt_ASCII_TO_Native 1
或者在bash執行下面兩行
export LOCAL_UNZIP=-DExt_ASCII_TO_Native
make12
unzip解壓縮含中文文件名zip包是出現亂碼的問題解決!
如果您的系統已經安裝了unzip
方法一 unzip行命令解壓,指定字元集
通過unzip行命令解壓,指定字元集
unzip -O CP936 xxx.zip (用GBK, GB18030也可以)1
方法二 在環境變數中,指定unzip參數
在環境變數中,指定unzip參數,總是以指定的字元集顯示和解壓文件
/etc/environment中加入2行
UNZIP=」-O CP936″
ZIPINFO=」-O CP936″12
方法三 利用pyton來處理
復制以下內容(Python)保存未myuzip.py文件腳本,並修改運行許可權為可運行(chmod +x uzip)
#!/usr/bin/env python# -*- coding: utf-8 -*-# uzip.pyimport osimport sysimport zipfileprint "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.close
file.close()
這樣以後我們解壓縮時只需要運行此文件即可
./myuzip.py xxxx.zip
2. linux下zip文件解壓出現亂碼怎麼辦
是文件名亂碼還是什麼?
如果是文件名亂碼就是系統字型檔的問題,更新一下相應字型檔應該能解決(或者強行重命名也沒問題),windows下也經常會有這種問題的,不是什麼太大的毛病
3. Linux 下 zip 文件解壓亂碼如何解決
1、這是zip格式的缺陷,zip文件格式中沒有欄位標志出文件名的編碼格式。Windows下生成的zip文件中的編碼是GBK/GB2312等,而linux下的默認編碼格式為UTF-8,所以才會出現亂碼。
2、解決方法
1、使用unzip解壓的時候,指定字元集(需要unzip支持,有些unzip命令不支持大O選項,自己可以安裝較新的unzip版本):
md5@crc4:~/$unzip-OCP936test.zip
2、藉助於p7zip和convmv:
a、在Fedora下的命令是
su-c'yuminstallp7zipconvmv'
b、在ubuntu下的安裝命令是
sudoapt-getinstallp7zipconvmv
安裝完之後,就可以用7za和convmv兩個命令完成解壓縮任務。
LANG=C7zaxyour-zip-file.zip
convmv-fGBK-tutf8--notest-r.
說明:
1)、第一條命令用於解壓縮,而LANG=C表示以US-ASCII這樣的編碼輸出文件名,如果沒有這個語言設置,它同樣會輸出亂碼,只不過是UTF8格式的亂碼(convmv會忽略這樣的亂碼)。
2)、第二條命令是將GBK編碼的文件名轉化為UTF8編碼,-r表示遞歸訪問目錄,即對當前目錄中所有文件進行轉換。
4. 在linux中解壓zip文件,中文字元亂碼,請問如何解決。不要粘貼復制。 系統本身的字元集是utf-8
如果你文件夾中只有這一個zip文件的話,可以用命令unzip *.zip 應該就OK了
5. linux系統,文件是utf-8格式的為什麼會亂碼呢
亂碼的問題有很多可能,第一、linux安裝時是否支持中文;第二、要用命令查一下格式:echo $LANG;第三確認格式是否需要在系統中修改格式類型;第四連接終端(putty,secureCRT)等工具的編碼是否和系統的編碼一致,不致要改為一致就可以了。
6. 上傳到linux的zip解壓亂碼怎麼解決
解壓縮亂碼和zip本身無關,應該是你的Linux操作系統設置的系統語言造成的。
一般來講Linux的中文默認編碼是zh_CN.UTF-8,而Windows的是GB2312,如果你在Windows創建zip壓縮包,壓縮包中的文件名稱是按照GB2312打包的,到Linux解壓縮自然成了亂碼。
解決方法有兩種,可以將Linux的默認編碼變為zh_CN.GBK,這可以通過修改/etc/sysconfig/i18n文件來完成;另一種方法就是改用ftp傳遞未經壓縮的文件,這樣文件名會被FTP服務自動轉碼。
7. linux下zip文件解壓出現亂碼怎麼辦
壓縮包里是中文的吧, linux如果裝了中文語言支持的話,把語言環境設置一下 LANG=zh_CN.utf-8