天天看點

Linux桌面系統解壓Windows使用者發來的zip壓縮包中文亂碼

作者:龍玉大大

現象

Linux桌面使用者大多數都遇到這個問題,對Windows桌面使用者發來的zip壓縮包,輕按兩下打開或者解壓,發現中文檔案名和路徑都是亂碼。

Linux桌面系統解壓Windows使用者發來的zip壓縮包中文亂碼

通過指令行unzip解壓也會得到一樣的結果:

12月 unzip xxx2022年12月居家辦公情況表集合.zip
Archive: xxx2022年12月居家辦公情況表集合.zip
inflating: ░╜╘╦2022─ъ12╘┬╛╙╝╥░ь╣л╟щ┐Ў▒э╝п║╧/░╜╘╦2022-12-1.doc
inflating: ░╜╘╦2022─ъ12╘┬╛╙╝╥░ь╣л╟щ┐Ў▒э╝п║╧/░╜╘╦2022-12-15.doc
inflating: ░╜╘╦2022─ъ12╘┬╛╙╝╥░ь╣л╟щ┐Ў▒э╝п║╧/░╜╘╦2022-12-16.doc
inflating: ░╜╘╦2022─ъ12╘┬╛╙╝╥░ь╣л╟щ┐Ў▒э╝п║╧/░╜╘╦2022-12-2.doc
inflating: ░╜╘╦2022─ъ12╘┬╛╙╝╥░ь╣л╟щ┐Ў▒э╝п║╧/░╜╘╦2022-12-5.doc           

分析

實際上這個是zip這種壓縮方式,并沒有指定壓縮的編碼格式。而Windows下生成的zip檔案中的編碼是GBK/GB2312等,Linux預設編碼格式是utf8.

➜ 12月 echo $LANG
zh_CN.UTF-8           

這個時候可以用`lsar`檢視一下壓縮包内容:

➜ 12月 lsar xxx2022年12月居家辦公情況表集合.zip
xxx2022年12月居家辦公情況表集合.zip: Zip
xxx2022年12月居家辦公情況表集合/xxx2022-12-1.doc
xxx2022年12月居家辦公情況表集合/xxx2022-12-15.doc
xxx2022年12月居家辦公情況表集合/xxx2022-12-16.doc
xxx2022年12月居家辦公情況表集合/xxx2022-12-2.doc
xxx2022年12月居家辦公情況表集合/xxx2022-12-5.doc
xxx2022年12月居家辦公情況表集合/           

還有更詳細的參數:

12月 lsar -L xxx2022年12月居家辦公情況表集合.zip
xxx2022年12月居家辦公情況表集合.zip: Zip
xxx2022年12月居家辦公情況表集合/xxx2022-12-1.doc:
Name: xxx2022年12月居家辦公情況表集合/xxx2022-12-1.doc
Size: 31.2 KB (31,232 bytes)
Compressed size: 16.9 KB (16,890 bytes)
Compression type: Deflate
Last modified: 2022-12-16 18:09:52 +0800
DOS file attributes: A----- (0x20)
Index in file: 0
Start of data: 80
Length of data: 16890
ZipCRC32: 0xba90c296
ZipCompressionMethod: 8
ZipExtractVersion: 20
ZipFileAttributes: 32
ZipFlags: 0
ZipLocalDate: 1435537722
ZipOS: 0
ZipOSName: MS-DOS
......................................................................           

從最後一句` ZipOSName: MS-DOS`看得出來,這個zip壓縮檔案來自Windows系統。

而Linux系統本身壓縮的zip檔案,最後一個屬性是`ZipOSName: Unix`

解決

在Linux系統下解壓Windows使用者打包的zip檔案,有兩個方式:

一、unzip

unzip解壓并指定編碼類型` -O`,可用的參數值`gbk gb2312 gb18030 cp930`等

➜ 12月 unzip -O gbk xxx2022年12月居家辦公情況表集合.zip
Archive: xxx2022年12月居家辦公情況表集合.zip
inflating: xxx2022年12月居家辦公情況表集合/xxx2022-12-1.doc
inflating: xxx2022年12月居家辦公情況表集合/xxx2022-12-15.doc
inflating: xxx2022年12月居家辦公情況表集合/xxx2022-12-16.doc
inflating: xxx2022年12月居家辦公情況表集合/xxx2022-12-2.doc
inflating: xxx2022年12月居家辦公情況表集合/xxx2022-12-5.doc           

二、unar

➜ 12月 unar xxx2022年12月居家辦公情況表集合.zip
xxx2022年12月居家辦公情況表集合.zip: Zip
xxx2022年12月居家辦公情況表集合/xxx2022-12-1.doc (31232 B)... OK.
xxx2022年12月居家辦公情況表集合/xxx2022-12-15.doc (31232 B)... OK.
xxx2022年12月居家辦公情況表集合/xxx2022-12-16.doc (31232 B)... OK.
xxx2022年12月居家辦公情況表集合/xxx2022-12-2.doc (31232 B)... OK.
xxx2022年12月居家辦公情況表集合/xxx2022-12-5.doc (31232 B)... OK.
xxx2022年12月居家辦公情況表集合/ (dir)... OK.
Successfully extracted to "./xxx2022年12月居家辦公情況表集合".           
Linux桌面系統解壓Windows使用者發來的zip壓縮包中文亂碼

繼續閱讀