Linux桌面系統解壓Windows用戶發來的zip壓縮包亂碼

現象

Linux桌面用戶大多數都遇到這個問題,對Windows桌面用戶發來的zip壓縮包,雙擊打開或者解壓,發現中文文件名和路徑都是亂碼。
image
通過命令行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月居家辦公情況表集合".

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章