題 壓縮文件可以打破嗎?


我剛要求有人給我發拉鍊 psd 文件。

他們以此為由拒絕了 壓縮文件可以破壞字體

我認為壓縮文件是完全可逆的,因此它是常用的。我認為對方不對。

有沒有關於壓縮文件內容的真相?


86
2018-05-13 02:34


起源


也許其他人混淆了壓縮文件(無損)與jpeg壓縮(有損),這可能使測試看起來很難看。 - Matt H
我知道我曾經有過zip文件的兼容性問題,因為文件格式在所有平台上使用...... - jokoon
我肯定經歷過某些'病態'案例,其中Winrar和WinXP的內置設施都破裂了 檔 (單個zipfile中有數万個)。這是4 - 5年前的事了 只要 我當時能找到的解決方案是使用7-zip。我記得最好,即使7-Zip也無法成功 拉開拉鍊 由其他例程創建的文件,表明故障是在壓縮,而不是解壓縮。顯然,無論如何,我選擇在生產系統中為雙方使用7-zip。 - FumbleFingers
@jokoon:我不確定說一個是有效的 文件格式...在所有平台上使用。在zip文件中使用了很多不同的內部格式,並且總是可以通過一個打包例程使用您在解包時碰巧使用的某些其他例程不完全支持的格式來創建存檔。 - FumbleFingers
@摸索;但是,任何體面的歸檔程序都應該捕獲哈希變化,並將操作報告為失敗 - 不要留下破碎的文件。 - Phoshi


答案:


不,壓縮文件不能破壞它。提供您的zip文件沒有損壞,它將在解壓縮時重現相同的文件。

在這種情況下,安裝在兩個不同系統上的字體之間的差異可能會導致問題,但這與zip / unzip進程完全無關。


134
2018-05-13 02:38



這就是我所懷疑的。感謝您的回答。 - alex
此外,一些zip格式支持冗餘,這意味著實際上可以存儲為zip 更安全 而不是存儲普通文件。 - BlueRaja - Danny Pflughoeft
你不應該快速說不,有很多壓縮/解壓縮文件實現,計算所有現有的操作系​​統和其他可以生成zip文件的東西,我不會感到驚訝的是,有些實現只是不關心其他一些。 - jokoon
@jokoon:那些文件會被破壞,他明確排除了 - mbx
-1理論上這是事實,但在實踐中,Mac字體在PC上解壓縮為0字節存在問題。這是由於正在創建資源分支。親自嘗試看看吧。 - Django Reinhardt


一般 用法,zip是無損的(假設沒有bug實現),但有  可能適用於數據丟失的場景:NTFS備用數據流。這個很少使用的功能允許一個 文件 有多個 獨立 內容集。大多數代碼只會看到 無名 流,但其他人可以存在。

所以;如果程序決定將數據存儲在NTFS備用數據流中,那麼您的zip客戶端 不會看到那一部分 (它需要明確地要求它,並且 RAR是目前唯一一個這樣做的人)。

但要強調的是:這種情況很少使用,通常不會像PSD那樣使用。我懷疑你的朋友/同事完全錯了。


80
2018-05-13 06:28



哇,這對我來說是全新的知識。 - kizzx2
我和奇怪的新人。什麼時候文件不是文件?當其內容隨意改變時。我聽說過更糟糕的錯誤,但並不多。 - msw
@msw-他們不會隨意改變;簡單地說 - 可以有多個與單個文件記錄關聯的數據塊。幾乎總是有一個(它很少使用),但...... - Marc Gravell♦
回到SO!太技術了! (當然開玩笑;) - Byron Whitlock
另一方面,我們有 人們抱怨強制將系統特定的元數據包含在檔案中。 - Daniel Beck♦


在某些情況下,如果Mac字體被壓縮然後解壓縮,則它可能不相同。這可能不會破壞它,但與上面的一些陳述相反,該過程可能不會提供相同的文件。

這裡討論的情況如下:

http://xahlee.org/UnixResource_dir/macosx.html

http://ask.metafilter.com/59789/How-to-email-my-font

但簡而言之:

  1. 如果它們是包含資源分叉的舊字體,並且用戶具有較舊版本的Mac OS X,通常為10.4或更早版本。像這樣的傳統字體適用於OS X,儘管它們最初用於OS 9和早期版本的Macintosh操作系統。完全可能(並且,根據我的經驗,常見的)一些人仍在使用他們在20年前建立的字體庫。通常這些是藝術家和藝術總監類型。例如,我有一些創建日期為1993的字體和數百個創建日期為1998的字體,大部分都有資源分叉。當然我應該把它們轉換成更現代的格式或者停止使用它們,但讓我們面對它:一旦你購買了Adobe字體庫,你就再也不想購買了它。在我與廣告藝術總監合作的那些年裡,我學會了尊重字體文件夾,好像它是藝術總監的日記,普通書或超我。

  2. 某些元數據將在某些版本的操作系統中被刪除。元數據可以是添加到文件的信息字段的事物。這不會破壞文件,但是再次,往返zip-unzip也不會生成相同的文件。

PS:我在這裡假設,如果一個人正在壓縮PSD文件以便交付給另一個人,那它沒有被夷為平地並且該字體尚未轉換為輪廓,這意味著一個人也會提供帶有PSD的字體文件以便接收端的人可以對文件進行自己的更改。這是一種常見的做法。


33
2018-05-13 13:22



+1 - 我希望我能給出足夠的分數將它推到堆棧頂部。 Mac OS具有Type 1和TrueType字體變體,其中字體數據存儲在資源分支中。雖然操作系統中的本機zip / unzip工具可以優雅地處理這種情況,但並非所有工具(特別是移植到OS X的命令行工具)都會。更糟糕的是, 不 壓縮字體並嘗試通過電子郵件或FTP發送它們 將 打破他們! - afrazier
但這裡的問題似乎與你如何壓縮它們有關,而不是你是否可以。似乎需要一個了解資源分支的程序,你必須知道如何使用它。我讀得對嗎? - uSlackr
@uSlackr,對,但問題仍然存在於接收端。如果存檔隨後被移動到Windows,您可能會得到一堆無用的字體文件,因為儘管Windows(特別是NTFS)確實允許文件中的多個數據流,但Windows上的字體不能以這種方式工作。然而,PSD文件本身可能在Mac和Windows之間可移植。 - RBerteig
+1 - 例如,將Mac字體保存在網絡驅動器上,然後查看它們在Windows或Linux PC上的大小 - 0字節!資源分叉的東西混淆了“它只是工作”的想法。 - ʍǝɥʇɐɯ
是的,在我的行業中眾所周知的事實是Mac字體不能很好地拉鍊。 PC用戶通常會將它們解壓縮為0個字節。 - Django Reinhardt


ZIP使用校驗和來檢查解壓縮文件是否與打包前完全相同。

因此,如果它由於某種原因(例如,破壞的存檔)而被更改 - 它甚至不會被解壓縮。


14
2018-05-13 02:37



由於zip使用無損壓縮(或'存儲',壓縮可能被禁用),因此無關緊要。校驗和只是為了能夠在出現問題時提供一些反饋。 - akira
原諒迂腐,但ZIP不使用校驗和 - 它使用32位循環冗餘校驗(aka CRC-32)它可以檢測到更廣泛的錯誤。 - Bevan
如果人們可以[並且他們確實]稱之為結果,那麼術語“校驗和”的含義顯然比其原始定義更廣泛 加密哈希函數 “校驗”。 - Random832


只有當他們做一些愚蠢的事情就像在文本模式上進行文本模式轉換一樣,或者如果某個地方的拉鍊/解壓縮被嵌入式拉鍊混淆了。 (這樣的錯誤  發生在過去 - 意思可能是10年前。)


9
2018-05-13 02:37





Zip使用無損壓縮算法來確保您獲得的數據與您輸入的數據相同。

(BTW,其他技術,如jpg,mpeg,mp3,使用有損技術來壓縮我們的眼睛和耳朵不那麼敏感的理論)


4
2018-05-13 03:07





我在“壓縮破壞字體”這一陳述中唯一可以看到的事實是,如果PSD文件格式本身俱有“壓縮”版本或選項,您可以在任何程序中創建這些文件,並且此選項以某種方式處理字體的方式不同。

使用任何zip程序都應該沒問題,除非它有問題。

作為對Marc的回應,如果您嘗試壓縮包含不理解這些的壓縮格式的軟鏈接和硬鏈接的目錄結構,那麼EXT文件系統上也存在潛在的文件系統問題(這就是為什麼我總是改為.tar.gz .zip那裡)。 此外,用相對路徑壓縮軟鏈接然後在其他地方解壓縮它們當然不會起作用,但這不是zip程序的錯。


0
2018-05-13 09:04





如果他們之前遇到過這個問題(壓縮破壞PSD),那麼他們的壓縮器軟件就會出錯,他們不會在PSD上包含他們需要的所有文件,和/或他們的計算機感染了病毒。

我會問他們是否通過將文件移動到usb磁盤而有類似的損壞,只是為了丟棄最後一個選項。


0
2018-05-13 15:51





只是為了完整性添加一個警告:壓縮可能導致文件的元數據(例如權限或上次訪問時間)丟失。

我不相信這通常與PSD文件和字體有關。


0
2018-05-14 00:55



我認為對無損壓縮算法和執行此任務的程序的概念存在誤解。無損意味著,壓縮的二進制流將被解壓縮為相同的輸出二進制流。元信息是OS依賴的,必須由OS和/或應用程序處理。 - Bora
謝謝@Bora,但我沒有這樣的誤解。我意識到壓縮不會影響文件中的實際數據。我建議一個“外部”原因,可能會讓人誤以為zip損壞了他們的文件和目錄。過去我通過恢復壓縮備份來捕獲,但卻發現我的應用程序不再有效,因為它們依賴於我沒有帶來的元數據。 (這不是我的基本誤解,而只是疏忽。) - Oddthinking


Zip可以破壞文件名。這樣的Zip不使用unicode。文件名的編碼未指定,並且在Windows上使用當前語言環境。

因此,當轉移到另一個系統時,您的文件名將被搞砸。

Zip格式的擴展是最近的程序(我認為自版本11以來的winzip)使用。

我更喜歡7z eversince,因為我的拉鍊滿是日本名字無法解壓縮它。


0
2018-05-14 01:34