

透過 7-Zip 壓縮 ZIP 檔案時須注意中文檔名無法正確解壓縮的問題...
source link: https://blog.miniasp.com/post/2020/09/14/7-Zip-with-Chinese-filenames-should-use-UTF-8
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

昨天在授課的時候,由於課堂上提供給學員的壓縮檔案中目錄名稱與檔案名稱有中文字的關係,導致全班有 3 位學員解壓縮之後這些目錄與檔案全部呈現亂碼,無法開啟與閱讀。經過一番研究之後發現,原來 7-Zip 在壓縮檔案的時候,預設會將檔名編碼為本機電腦系統設定的 Code Page,而不是使用 UTF-8 編碼,這會導致解壓縮的人只要不是用相同的 Code Page 設定,就會解壓縮失敗,檔名出現亂碼。本篇文章就來說說這個問題的始末與解決方案!
如何得知目前電腦使用的 Code Page
要查詢目前電腦使用的 Code Page 有三種方法:
-
使用 Windows 內建的
C:\Windows\System32\chcp.com
工具這工具可以讓你查詢或切換到不同的 Code Page 設定,你可以先進入 Command Prompt 命令提示字元視窗,輸入
chcp
就可以知道目前系統預設的 Code Page 為何:你從 Wikipedia 上面的 Code page 文件,就可以得知不同 Code Page 代表的文字編碼。若以台灣為例,我們常用的 Code page 為
950
,也就是使用 Big5 編碼的意思。 -
使用 PowerShell 查詢出系統的區域設定
Get-WinSystemLocale
這裡的 LCID (Locale ID)
1028
就代表著zh-TW
(Chinese Taiwan) 的意思,而 Chinese Taiwan 地區針對 non-Unicode 的應用程式,預設就是採取Big5
作為編碼。以下是取得系統所有地區資訊的 Cmdlet 命令:
Get-Culture Get-WinSystemLocale Get-WinUILanguageOverride Get-WinUserLanguageList Get-WinHomeLocation
-
使用「控制台」的「地區」設定
你可以透過以下命令快速開啟控制台的「地區」設定視窗:
control intl.cpl
如何切換 Windows 10 系統預設編碼
這邊有兩種設定方法:
-
透過 PowerShell 進行系統的區域設定
請用「系統管理原身份」執行 PowerShell 視窗,並執行以下 Set-WinSystemLocale 命令:
Set-WinSystemLocale -SystemLocale zh-TW
注意:透過 PowerShell 設定需要讓電腦重開機兩次才會看到設定生效!(很詭異,但就是如此)
-
透過「控制台」的「地區」視窗進行設定
你可以透過以下命令快速開啟控制台的「地區」設定視窗:
control intl.cpl
然後參考下圖手動進行設定即可:
變更後記得要重開機才會生效,但是只要重開機一次即可!
如何設定 7-Zip 指定用 UTF-8 作為檔案名稱的預設編碼
其實這次出問題的同學來自馬來西亞(Malaysia),他的電腦安裝全英文的 Windows 10 作業系統,而且地區資訊也不是設定在 Chinese Taiwan,所以才會遇到這次問題。但我總不能請他調整地區資訊吧?!我真正覺得納悶的地方是,Windows 10 老早就支援 Unicode 了,怎麼可能不能顯示中文檔名?會不會是 7-zip 壓縮軟體的問題?還是解壓縮軟體的問題呢?經過詢問發現,他也是用 7-Zip 進行解壓縮的,這就讓我更確信這問題來自於「壓縮」的過程,覺得一定有參數可以設定。
最後終於找到關於 7-Zip 命令列的參數說明文件,有個 -m (Set compression Method) switch 可以用來設定一些壓縮時的參數。這裡有個參數叫做 cu
可以設定用 7-Zip 壓縮檔案時是否要用 UTF-8 來對「檔名」進行編碼,而預設值竟然為 off
(關閉)!

知道這個參數後,以後壓縮就知道了,你只要在壓縮的時候,參考以下圖示進行設定,先設定「壓縮檔格式」為 zip
,然後在「參數」欄位加入 cu=on
即可完成設定。你成功壓縮一次之後,你這次所設定的 cu=on
參數會變成預設值,下次不用再手動設定! ?

如果你要用命令列工具壓縮,可以使用以下命令:
7z a -mcu=on test.zip
上述命令不特別指定要壓縮的檔名或目錄,預設會把「當前目錄」所有檔案與所有目錄全部壓縮成
*.zip
檔。
Recommend
-
9
-
16
PowerShell 壓縮 ZIP 檔-黑暗執行緒 同事在 Windows 10 高高興興寫了壓縮檔案的 PowerShell 小工具,丟上伺服器執行時踢到鐵板。 PowerShell 有個
-
6
冷知識 - 刪不掉的 Windows 檔案 2021-04-13 09:38 PM 2 同事問了一個鬼問題 - "Windows 檔名可不可以只有一個空白?" 答案是不行。測試過程我搞出一...
-
5
Windows 檔名不分大小寫之更名陷阱 2021-06-22 09:23 PM
-
19
我們最近幾年幾乎所有案子都導入 CI/CD,把所有能自動化的工作全部都指令化,所以只要公司需要開發時期用的測試機,或是客戶需要安裝主機,通常都可以在 10 分鐘內搞定所有環境與設定。今天這篇文章我要來分享幾個常用的 7-Zi...
-
21
用在 IoT 裝置上的壓縮演算法 Heatshrink 在「Heatshrink – An ultra-lightweight compression library for em...
-
18
PostgreSQL 14 支援的 LZ4 壓縮 在 Hacker News 上看到 PostgreSQL 14 新支援的
-
14
更改檔案中文編碼導致 git diff 亂碼之完美解法-黑暗執行緒 大家有遇到 git diff 比對文字檔,因中文編碼更改(例如 Big5 改 UTF-8)導致結果裡有一半中文變亂碼的情況嗎?我想到一個完美解法。(我自己覺得啦,不服來戰) git diff 遇到文字檔中文編...
-
10
內嵌 .js GZIP 壓縮檔-黑暗執行緒 繼續我的 HTML 文件檔計劃。封裝文件檔的另一項重點是把所有內容打包成單一 .html 檔 (高年級同學可能還記得 I...
-
3
再探 Windows 檔名不分大小寫陷阱 先幫沒踩過的同學補充這顆小地雷 - Windows 檔名不分大小寫阱陷。 我們都知道 Windows 的檔案系統不區分...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK