用 rubyzip 壓內含中文檔名的 Zip 檔給 Windows

再也不麻煩了,向煩死人的 Big5 告別吧。

以往為了應付 Windows 而必須先把檔案名稱轉換成 Big5 才能讓他們在 Windows 正常解壓縮。這種做法很可能會遇到 Unicode 轉換到 Big5 失敗的問題,例如游錫堃的「」在 Big5 裡面就沒有,這時候就需要想很多 workaround。

但如果你面向的使用者很少,例如公司內部用的系統,解法會比較簡單。rubyzip 不知到哪時候開始提供了一個可以讓新版的 Windows 直接認出 Unicode 檔名的方法:

files with non ascii filenames — rubyzip/rubyzip
_rubyzip - Offical Rubyzip repository_github.com

簡單來說,這樣設定就行了:(Rails 的話開一個 initializer 即可)

Zip.unicode_names = true

凡 Windows 8 以上的版本都沒問題。檔案總管內建的解壓縮工具就可以了。

至於如果你要支援 Windows 7 以下,或使用者不固定⋯⋯Good luck 😂


同樣的問題本來我已經 6 年沒處理了,但最近來到日本,又要應付 Shift_JIS 的問題。看來 legacy encoding 真的是到哪裡都很煩的問題。