• 首頁
  • 指南
  • Mac 建立的 ZIP 在 Windows 上檔名亂碼的原因與 3 種解法

Mac 建立的 ZIP 在 Windows 上檔名亂碼的原因與 3 種解法

@SoNiceInfo 發布於 2026年10月13日


你在 Mac 上壓縮了一個資料夾並傳出去,結果使用 Windows 的對方看到的不是 Résumé.pdf,而是 R├⌐sum├⌐.pdf 這樣的檔名。 檔案本身並沒有問題,問題出在 ZIP 如何標示檔名的文字編碼。 本指南根據我們實際用 Finder 的「壓縮」與 zip 指令建立的 ZIP,說明這個問題發生的原因,並介紹在 Mac 上建立能在 Windows 上保留正確檔名的 ZIP 的 3 種方法,以及如何排除 .DS_Store 與 __MACOSX 等 Mac 專用的檔案。

檔名為什麼會變成亂碼

ZIP 格式並沒有規定檔名要使用哪種文字編碼。取而代之的是,每個檔案的標頭中都有一個 UTF-8 旗標,設定了這個旗標,就代表檔名是 UTF-8。 沒有這個旗標時,接收端的系統會用它自己的方式讀取檔名。Windows 會以舊式字碼頁讀取沒有旗標的檔名:美國英文版 Windows 為 CP437,日文版 Windows 為 Shift_JIS(CP932)。

Mac 以 UTF-8 寫入檔名,卻沒有設定這個旗標。於是 Windows 會把 UTF-8 的位元組當成 CP437 或 Shift_JIS 解讀,Résumé.pdf 就變成了 R├⌐sum├⌐.pdf,而像 見積書.pdf 這樣的日文檔名,則會變成一串毫不相干的字元。

另外還有一個與重音符號與日文濁音符號有關的問題。Mac 有時會把 é 這樣的字元儲存成兩個字元:e 加上一個組合用的重音符號(這種形式稱為 NFD)。如果直接放進 ZIP,Windows 上的部分工具會把重音符號分開顯示。 把它們組合成一個字元(NFC 正規化)就能避免這個問題。

內建工具建立的 ZIP 實測

我們在 macOS 27 上壓縮了一個包含日文檔名檔案與 .DS_Store 檔案的資料夾,然後檢查產生的 ZIP。 Finder 的「壓縮」是以 ditto -c -k --sequesterRsrc --keepParent 重現的;根據 ditto 的 man page,這個指令會建立與 Finder「壓縮」類似的壓縮檔。

方法UTF-8 旗標.DS_Store__MACOSX
Finder 的「壓縮」未設定包含包含(檔案帶有延伸屬性時)
zip 指令(zip -r)未設定(沒有可設定的選項)包含(可用 -x 排除)不包含
Python 的 zipfile已設定包含不包含
ZipScope已設定(並進行 NFC 正規化)不包含不包含

macOS 內建的 zip 指令在編譯時並未納入設定 UTF-8 旗標的選項(-UN),使用這個選項會出現錯誤。 換句話說,光靠內建工具,無法建立能在 Windows 上保留正確非 ASCII 檔名的 ZIP。

__MACOSX 資料夾會在檔案帶有延伸屬性時出現,例如從網路下載的檔案,或在 Finder 中加上標籤的檔案。資料夾中存放的是檔名以 ._ 開頭的檔案。

推薦方法 1:用 App(ZipScope)壓縮

ZipScope 是本指南作者開發的 Mac 解壓縮與壓縮 App,能建立 Windows 使用者開啟後檔名不會變成亂碼的 ZIP。 它會為非 ASCII 的檔名設定 UTF-8 旗標,並正規化為 NFC。.DS_Store、__MACOSX 與 ._ 檔案預設都會被排除。

1

按右鍵壓縮

在 Finder 中選取檔案或資料夾,按右鍵並選擇「Compress with ZipScope」。也可以把它們拖放到選單列圖示上。

2

確認設定

排除 .DS_Store 與 NFC 正規化一開始就已開啟。請確認檔名與儲存位置。

3

按一下「Create」

就會得到在 Windows 上也能保留正確檔名的 ZIP,並在 Finder 中顯示。

ZipScope 的 ZIP 建立視窗,Windows 相關選項預設為開啟

建立沒有密碼的 ZIP 是免費的。建立有密碼保護的 ZIP 與 7z 壓縮檔屬於 Pro 功能(App 內一次買斷)。 ZipScope 完全不使用網路,因此你的檔案絕不會離開你的 Mac。

查看 ZipScope →

macOS 14 以上 · Apple 晶片與 Intel

適合終端機使用者方法 2:用 Python 的 zipfile 壓縮

Python 內建的 zipfile 模組會為非 ASCII 的檔名設定 UTF-8 旗標。在終端機中移到要壓縮的項目所在的資料夾,然後執行:

cd ~/Desktop
python3 -m zipfile -c Documents.zip Documents/

第一次執行 python3 時,macOS 可能會要求你安裝命令列開發者工具。 這個方法有幾項限制:

  • 會包含 .DS_Store 檔案(沒有排除的選項)。
  • 不會把檔名正規化為 NFC,因此分解形式(NFD)的檔名會原封不動地放進去。
  • 每次都需要開啟終端機。

若不想包含 .DS_Store,請先從來源資料夾中刪除它(這只會重設 Finder 對該資料夾的顯示設定)。

find Documents -name .DS_Store -delete

免安裝方法 3:先把檔名改成 ASCII

如果所有檔案與資料夾的名稱都只使用純 ASCII 的英文字母與數字,用任何工具都可以,完全不會有編碼的問題。這個方法很可靠,但要重新命名大量檔案很花時間,而且對方可能比較看不懂檔名的意思。

Finder 的「壓縮」仍然會加入 .DS_Store 與 __MACOSX,如果你在意這一點,請使用 zip 指令並排除 .DS_Store:

cd ~/Desktop
zip -r Documents.zip Documents -x "*.DS_Store"

-x "*.DS_Store" 可以排除 .DS_Store 檔案。zip 指令不會建立 __MACOSX 資料夾。

排除 .DS_Store 與 __MACOSX

.DS_Store 是 Finder 儲存資料夾顯示設定的檔案。__MACOSX 則是 Finder 的「壓縮」為了保留延伸屬性而建立的資料夾。 兩者在 Mac 上都是隱藏的,但在 Windows 上會顯示成一般的檔案,這就是對方會詢問那些奇怪的多餘檔案的原因。

  • Finder 的「壓縮」 ─ 沒有排除它們的設定。
  • zip 指令 ─ 用 -x "*.DS_Store" 可以排除 .DS_Store。不會建立 __MACOSX 資料夾。
  • ZipScope ─ 預設排除 .DS_Store、__MACOSX 與 ._ 檔案。解壓縮在 Mac 上建立的 ZIP 時,也會略過這些檔案(可在「Settings」中設定)。

Windows 建立的 ZIP 在 Mac 上變成亂碼時

反過來也會發生同樣的問題。Windows 會以舊式字碼頁寫入 ZIP 中的檔名,而且不設定 UTF-8 旗標,因此日文版 Windows 建立的 ZIP,檔名是以 Shift_JIS 儲存的。 我們在 macOS 27 上用內建工具(ditto)解壓縮這樣的 ZIP。Mac 設定為日文時,檔名能正確顯示;系統編碼為英文時,檔名則變成 å©êœèë,而 unzip 指令更是出現錯誤而中止。 也就是說,內建工具能否正確處理,取決於你的 Mac 使用哪種語言。

不論你的 Mac 使用哪種語言,ZipScope 都會自動偵測 Shift_JIS(CP932)的檔名,並以正確的日文顯示。 如果偵測錯誤,可以手動切換為 CP932、UTF-8、EUC-JP、GBK、EUC-KR 或 CP437。遇到使用日文密碼的 ZIP 時,它會同時嘗試 UTF-8 與 CP932。

以錯誤的編碼讀取、檔名變成亂碼的檔案清單
經 ZipScope 自動偵測後,以正確日文顯示的同一份檔案清單

哪種方法適合你

  • 工作上經常與 Windows 使用者交換 ZIP ─ ZipScope。按一下右鍵,就能建立檔名不會變成亂碼、也不含 .DS_Store 的 ZIP,還能處理來自 Windows 的亂碼 ZIP。
  • 偶爾才寄 ZIP,而且不排斥使用終端機 ─ Python 的 zipfile。請先刪除 .DS_Store。
  • 檔案不多,重新命名也無妨 ─ 改成 ASCII 檔名。

常見問題

Q. ZIP 檔案中的 UTF-8 旗標是什麼?

它是每個檔案標頭中的一個標記,代表「這個檔名是以 UTF-8 寫入的」。ZIP 規格中稱為通用旗標(general purpose flag)的第 11 位元,也叫做 Language encoding flag(EFS)。 設定了這個旗標時,Windows 會以 UTF-8 讀取檔名;沒有設定時,Windows 會以舊式字碼頁讀取檔名(美國英文版 Windows 為 CP437,日文版 Windows 為 Shift_JIS),因此來自 Mac 的檔名就會變成亂碼。

Q. 我傳了在 Windows 上也能正常顯示的 ZIP,對方看到的檔名卻還是亂碼。

對方可能使用了會忽略 UTF-8 旗標的舊版解壓縮工具。近期版本的 Windows 用內建工具(檔案總管)就能正確讀取設有 UTF-8 旗標的 ZIP,因此請對方改用檔案總管開啟,或是把檔名改成純 ASCII 後再重新壓縮。

Q. 對方可以在 Windows 上把檔名修正回來嗎?

使用能以 UTF-8 重新讀取檔名的解壓縮工具,或許就能正確顯示。不過,由你這邊建立設有 UTF-8 旗標的 ZIP 會更可靠,也能省去對方的麻煩。

Q. .DS_Store 檔案可以刪除嗎?

.DS_Store 是 Finder 用來儲存資料夾顯示設定(圖示位置、顯示方式等)的檔案。刪除它不會影響你的文件,Finder 也會在需要時重新建立。 只是不想讓它被包進 ZIP 的話,其實不必刪除;請參閱排除 .DS_Store 與 __MACOSX。

Q. 有密碼保護的 ZIP 也能讓檔名在 Windows 上正常顯示嗎?

可以。ZipScope Pro(一次買斷)建立的有密碼保護的 ZIP 會帶有 UTF-8 旗標,並能用 Windows 內建工具開啟。 zip 指令雖然可以加上密碼,但無法設定 UTF-8 旗標。請參閱如何在 Mac 上建立有密碼保護的 ZIP。

總結

在 Mac 上建立的 ZIP 之所以在 Windows 上變成亂碼,是因為 Mac 以 UTF-8 寫入檔名,卻沒有設定標示這件事的旗標。 Finder 的「壓縮」與 zip 指令都無法設定這個旗標,因此想保留非 ASCII 的檔名,請使用 ZipScope 等會設定 UTF-8 旗標的 App,或是 Python 的 zipfile。 排除 .DS_Store 與 __MACOSX,也能讓對方少一些困惑。