Character-Encoding

如何正確解壓縮具有希伯來語名稱的文件的 ZIP 存檔?

  • February 24, 2021

有人給我發了一個 ZIP 文件,其中包含帶有希伯來語名稱的文件(並在 Windows 上創建,不確定使用哪個工具)。我在 Debian Stretch 上使用 LXDE。Gnome 存檔管理器設法解壓縮文件,但希伯來字元出現亂碼。我我正在將 UTF-8 八位字節擴展到 Unicode 字元,例如,我有一個文件,其名稱有四個字元和一個 .doc 就足夠了,字元是: 0x008E 0x0087 0x008E 0x0085 。使用命令行解壓縮實用程序更糟糕 - 它拒絕完全解壓縮,抱怨“無效或不完整的多字節或寬字元”。

所以,我的問題是:

  • 是否有另一個解壓縮實用程序可以使用正確的名稱解壓縮我的文件?
  • 文件的壓縮方式有問題,還是只是 ZIP 實現的不兼容?甚至是 Linux ZIP 實用程序的錯誤功能/錯誤?
  • 使用亂碼解壓縮後,我該怎麼做才能獲得正確的文件名?

聽起來文件名是在 Windows 的專有程式碼頁之一(CP8621255等)中編碼的。

  • **是否有另一個解壓縮實用程序可以使用正確的名稱解壓縮我的文件?**我不知道原生支持這些程式碼頁的 zip 實用程序。7z 對編碼有一些了解,但我相信它必須是您的系統更普遍了解的編碼(您通過設置LANG環境變數來選擇它)並且 Windows 程式碼頁可能不在其中。

unzip -UU應該從命令行創建名稱中包含正確字節的文件(通過禁用所有 Unicode 支持)。這可能是您已經從 GNOME 工具中獲得的效果。無論哪種方式,編碼都不正確,但我們可以在下面修復它。

  • **文件的壓縮方式有問題,還是只是 ZIP 實現的不兼容?甚至是 Linux ZIP 實用程序的錯誤功能/錯誤?**您獲得的文件不是可移植的。儘管格式規範說名稱應該是 UTF-8 或 cp437 而您的名稱都不是,但對於編碼是固定且事先已知的內部使用而言,這不一定是*錯誤的。*即使在 Windows 機器之間,使用不同的程式碼頁也效果不佳,但非 Windows 機器一開始就沒有這些程式碼頁的概念。大多數工具 UTF-8 對其文件名進行編碼(這仍然不足以避免出現問題)。
  • **使用亂碼解壓縮後,我該怎麼做才能獲得正確的文件名?**如果您可以辨識文件名的編碼,則可以將現有名稱中的字節轉換為 UTF-8 並將現有文件移動到正確的名稱。convmv工具基本上將該過程包裝成一個命令:convmv -f cp862 -t utf8 -r .將嘗試將內部的所有內容.從 cp862 轉換為 UTF-8。

或者,您可以使用iconvandfind將所有內容移至正確的名稱。就像是:

find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp862 -t utf8)"' sh {} \;

將找到目前目錄下的所有文件並嘗試將名稱轉換為 UTF-8。

無論哪種情況,您都可以嘗試不同的編碼並嘗試找到一個有意義的編碼。


為您修復編碼後,如果您想將這些文件發送回另一個方向,那麼您可能會在另一端遇到同樣的問題。在這種情況下,您可以在使用 壓縮文件之前反轉該過程-UU,因為在 Windows 端可能很難修復。

引用自:https://unix.stackexchange.com/questions/251969