Czy skompresowanie pliku może go złamać?

85

Poprosiłem tylko kogoś, aby przysłał mi spakowany psdplik.

Odmówili, powołując się na to, że skompresowanie pliku może uszkodzić czcionki .

Zakładam, że skompresowanie pliku jest całkowicie odwracalne, dlatego jest powszechnie używane. Myślę, że druga osoba jest niepoprawna.

Czy jest jakaś prawda o tym, że zipowanie psuje zawartość plików?

alex
źródło
51
Być może druga osoba pomyliła spakowanie pliku (bezstratne) z kompresją JPEG (straty), co może sprawić, że test będzie wyglądał brzydko.
Matt H
Wiem, że kiedyś miałem problemy ze zgodnością plików zip, ponieważ format pliku jest używany na wszystkich platformach ...
jokoon
1
Z pewnością spotkałem się z pewnymi „patologicznymi” przypadkami, w których zarówno Winrar, jak i wbudowane WinXP złamały pliki (dziesiątki tysięcy w jednym pliku zip). To było 4-5 lat temu, a jedynym rozwiązaniem, jakie wtedy mogłem znaleźć, było użycie 7-zip. Jak najlepiej pamiętam, nawet 7-Zip nie mogło z powodzeniem rozpakować plików utworzonych przez inne procedury, co sugeruje, że przyczyną błędu było rozpakowanie, a nie rozpakowanie. Oczywiście i tak wybrałem 7-suwak dla obu stron w systemie produkcyjnym.
FumbleFingers
1
@ jokoon: Nie jestem pewien, czy można mówić o formacie pliku ... używanym na wszystkich platformach . Istnieje kilka różnych formatów wewnętrznych używanych w plikach zip i zawsze jest możliwe, że archiwum można utworzyć za pomocą jednej procedury pakowania przy użyciu formatu, który jest niedoskonale obsługiwany przez inną procedurę, której używasz podczas rozpakowywania.
FumbleFingers
@Grzebanie się; Ale nadal każdy porządny archiwizator powinien wychwycić zmianę skrótu i ​​zgłosić operację jako błąd - nie pozostawiać po sobie uszkodzonego pliku.
Phoshi

Odpowiedzi:

133

Nie, skompresowanie pliku nie może go złamać. Jeśli plik zip nie jest uszkodzony, po rozpakowaniu odtworzy identyczny plik.

W takim przypadku różnica między czcionkami zainstalowanymi w dwóch różnych systemach może powodować problemy, ale nie ma to żadnego związku z procesem zip / unzip.

Mike Fitzpatrick
źródło
4
Tak podejrzewałem. Dzięki za odpowiedź.
alex
34
Ponadto niektóre formaty zip obsługują redundancję, co oznacza, że ​​przechowywanie jako zip może być bezpieczniejsze niż przechowywanie zwykłego pliku.
BlueRaja - Danny Pflughoeft
Nie powinieneś tak szybko odmawiać, istnieje wiele implementacji plików do rozpakowywania / rozpakowywania, licząc wszystkie istniejące systemy operacyjne i inne rzeczy, które mogą tworzyć pliki zip, nie byłbym zaskoczony, że niektóre implementacje po prostu nie dbają o inne .
Jokoon
@jokoon: wtedy pliki te zostaną uszkodzone, co wyraźnie wyklucza
mbx
3
-1 Teoretycznie jest to prawda, ale w praktyce występują problemy z rozpakowaniem czcionek Mac na komputerze jako 0 bajtów. Jest to spowodowane tworzeniem rozwidlenia zasobów. Wypróbuj sam i przekonaj się.
Django Reinhardt
80

W powszechnym użyciu zip jest bezstratny (przy założeniu bezbłędnej implementacji), ale istnieje jeden scenariusz, który może mieć zastosowanie do utraty danych: Alternatywne strumienie danych NTFS. Ta mało używana funkcja pozwala, aby pojedynczy plik zawierał wiele niezależnych zestawów treści. Większość kodu będzie widziała tylko nienazwany strumień, ale inne mogą istnieć.

Więc; jeśli program zdecyduje się przechowywać dane w alternatywnym strumieniu danych NTFS, klient zip nie zobaczy tej części (musi jawnie o to poprosić, a RAR jest jedynym, który robi to obecnie ).

Ale, aby podkreślić: jest to używane bardzo rzadko i zwykle nie w przypadku PSD. Podejrzewam, że twój przyjaciel / współpracownik jest po prostu zły.

Marc Gravell
źródło
11
Wow, to dla mnie zupełnie nowa wiedza.
kizzx2
5
Nowe dla mnie i dziwne. Kiedy plik nie jest plikiem? Kiedy jego zawartość mutuje do woli. Słyszałem o gorszych błędach, ale niewiele.
msw
7
@msw - nie mutują do woli; po prostu - może istnieć więcej niż jedna porcja danych powiązanych z jednym rekordem pliku. Prawie zawsze jest dokładnie jeden (jest bardzo rzadko używany), ale ...
Marc Gravell
4
Wróć do SO! Zbyt techniczny! (żartuję oczywiście;)
Byron Whitlock
32

Istnieją okoliczności, w których czcionka Mac może nie być identyczna, jeśli zostanie spakowana, a następnie rozpakowana. To nie może go złamać, ale w przeciwieństwie do niektórych powyższych instrukcji, proces może nie dostarczyć identycznego pliku.

Okoliczności są omówione tutaj:

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

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

Ale w skrócie:

  1. Jeśli są to znacznie starsze czcionki zawierające widelce zasobów, a użytkownik ma starszą wersję systemu Mac OS X, zwykle 10.4 lub starszą. Starsze czcionki takie jak ta działają w systemie OS X, chociaż pierwotnie były przeznaczone dla systemu operacyjnego OS 9 i wcześniejszych wersji systemu operacyjnego Macintosh. Jest całkowicie prawdopodobne (i z mojego doświadczenia często), że niektórzy ludzie nadal korzystają z biblioteki czcionek, którą zbudowali już 20 lat temu. Zazwyczaj są to artyści i dyrektorzy artystyczni. Na przykład mam kilka czcionek z datami utworzenia 1993 i setki z datami utworzenia 1998, większość z widelcami zasobów. Z pewnością powinienem przekonwertować je na bardziej nowoczesne formaty lub przestać ich używać, ale spójrzmy prawdzie w oczy: kiedy kupisz bibliotekę czcionek Adobe, nigdy więcej nie będziesz chciał jej kupować. W latach pracy z dyrektorami artystycznymi w dziedzinie reklamy

  2. Niektóre metadane zostaną usunięte w niektórych wersjach systemu operacyjnego. Metadane mogą być elementami dodanymi do pola informacyjnego pliku. Nie spowoduje to uszkodzenia pliku, ale ponownie, podobnie jak rozpakowywanie pliku zip w obie strony nie tworzy identycznego pliku.

PS: Zakładam tutaj, że jeśli ktoś kompresuje plik PSD w celu dostarczenia go innej osobie, to nie został on spłaszczony i że czcionka nie została przekonwertowana na kontur, co oznacza, że ​​dostarczono by również pliki czcionek z PSD aby osoba po stronie odbierającej mogła wprowadzić własne zmiany w pliku. To jest powszechna praktyka.

Grant Barrett
źródło
2
+1 - Chciałbym dać tyle punktów, aby przesunąć go na szczyt stosu. Mac OS ma zarówno warianty czcionek Type 1, jak i TrueType, w których dane czcionki są przechowywane w rozwidleniu zasobów. Podczas gdy natywne narzędzia zip / unzip w systemie operacyjnym potrafią poradzić sobie z tą sytuacją z wdziękiem, nie wszystkie narzędzia (szczególnie narzędzia wiersza poleceń przeniesione do OS X). Co gorsza, nie zipowanie czcionek i próba wysłania ich pocztą e-mail lub FTP spowoduje ich uszkodzenie!
afrazier
1
Ale tutaj wydaje się, że problemem jest sposób ich kompresji, a nie to, czy możesz. Wydaje się, że potrzebujesz programu, który rozumie rozwidlenia zasobów i musisz wiedzieć, jak go używać. Czy dobrze to czytam?
uSlackr
@ uSlackr, prawda, ale problem utrzymuje się na końcu odbierającym. Jeśli archiwum zostanie następnie przeniesione do systemu Windows, prawdopodobnie otrzymasz stos niepotrzebnych plików czcionek, ponieważ chociaż system Windows (w szczególności NTFS) zezwala na wiele strumieni danych w pliku, czcionki w systemie Windows nie działają w ten sposób. Jednak sam plik PSD może być przenośny między komputerami Mac i Windows.
RBerteig
+1 - na przykład zapisz czcionki Maca na dysku sieciowym, a następnie zobacz, jak duże są na komputerze z systemem Windows lub Linux - 0 bajtów! Jest to rozwidlenie zasobów mylące pojęcie „to po prostu działa”.
ʍǝɥʇɐɯ
Tak, to dobrze znany fakt w mojej branży, że czcionki Mac nie są dobrze zipowane. Często użytkownik komputera rozpakuje je 0 bajtów.
Django Reinhardt
14

ZIP używa sumy kontrolnej, aby sprawdzić, czy rozpakowany plik jest dokładnie taki sam, jak przed spakowaniem.

Więc jeśli zostałby zmieniony z jakiegoś powodu (na przykład zepsute archiwum) - nie zostałby nawet rozpakowany.

zerkms
źródło
nie ma znaczenia, ponieważ zip używa kompresji bezstratnej (lub „przechowywania”, kompresję można wyłączyć). suma kontrolna służy jedynie zapewnieniu informacji zwrotnej, jeśli coś poszło nie tak.
akira
13
Wybacz pedanterię, ale ZIP nie używa sumy kontrolnej - używa 32-bitowej cyklicznej kontroli nadmiarowej (inaczej CRC-32 ), która wykrywa znacznie szerszy zakres błędów.
Bevan
5
Termin „suma kontrolna” wyraźnie nabrał nieco szerszego znaczenia niż jego pierwotna definicja, jeśli ludzie mogą [i tak nazywają] wyniki funkcji kryptograficznych funkcji skrótu „sumami kontrolnymi”.
Random832
9

Tylko wtedy, gdy robią coś głupiego, jak konwersja w trybie tekstowym, lub jeśli jest gdzieś uszkodzony zip / rozpakuj, który zostałby pomylony przez osadzony zip. (Takie błędy nie występowały w przeszłości. - co oznacza, może 10 lat temu)

geekozaur
źródło
4

Zip korzysta z bezstratnego algorytmu kompresji, aby zapewnić, że dane, które odzyskasz, są identyczne z danymi, które wstawiłeś.

(BTW, inne technologie, takie jak jpg, mpeg, mp3, używają stratnych technik do kompresji z teorią, że nasze oczy i uszy nie są tak wrażliwe)

uSlackr
źródło
0

Jedyną prawdą, jaką widziałem w stwierdzeniu „zipping breaks fonts” jest to, że sam format pliku PSD ma „skompresowaną” wersję lub opcję, którą możesz włączyć w dowolnym programie, który tworzy te pliki, a ta opcja w jakiś sposób obsługuje czcionki.

Używanie dowolnego programu zip powinno być w porządku, chyba że jest to błędne.

W odpowiedzi na Marca występują również potencjalne problemy z systemem plików w systemach plików EXT, jeśli spróbujesz spakować strukturę katalogów zawierającą miękkie i twarde łącza w formacie spakowanym, który ich nie rozumie (dlatego zamiast tego zawsze tworzę plik .tar.gz .zip tam). Również skompresowanie miękkich linków ze ścieżkami względnymi, a następnie rozpakowanie ich w innym miejscu, oczywiście nie zadziała, ale to nie wina programu zip.

użytkownik81051
źródło
0

Jeśli mieli już ten problem (zipowanie powodujące uszkodzenie PSD), oznacza to, że albo ich oprogramowanie kompresujące jest wadliwe, nie dołączają wszystkich potrzebnych plików na PSD i / lub ich komputery są zainfekowane wirusem.

Zapytałbym ich, czy mieli podobne uszkodzenia, przenosząc pliki na dyski USB, aby odrzucić tę ostatnią opcję.

egarcia
źródło
0

Aby dodać jeszcze jedno zastrzeżenie dotyczące kompletności: skompresowanie może spowodować utratę metadanych pliku, takich jak uprawnienia lub czas ostatniego dostępu.

Nie sądzę, aby miało to ogólne znaczenie dla plików i czcionek PSD.

Dziwne
źródło
Myślę, że istnieje nieporozumienie w koncepcji bezstratnego algorytmu kompresji i programów wykonujących to zadanie. Bezstratny oznacza, że ​​skompresowany strumień binarny zostanie zdekompresowany do identycznego wyjściowego strumienia binarnego. Meta informacje są zależne od systemu operacyjnego i muszą być obsługiwane przez system operacyjny i / lub aplikację.
Bora
1
Dzięki, @Bora, ale nie mam takiego nieporozumienia. Zdaję sobie sprawę, że zipowanie nie wpływa na rzeczywiste dane w pliku. Sugeruję „zewnętrzną” przyczynę, która może oszukać ludzi, że zip może uszkodzić ich pliki i katalogi. W przeszłości przyłapano mnie na przywracaniu spakowanych kopii zapasowych, ale okazało się, że moje aplikacje już nie działają, ponieważ zależą one od metadanych, których nie przenosiłem. (Nie jest to podstawowe nieporozumienie z mojej strony, ale jedynie niedopatrzenie.)
Dziwne,
0

Zip może uszkodzić nazwy plików. Zip jako taki nie używa Unicode. Kodowanie nazw plików jest nieokreślone, aw systemie Windows używane są bieżące ustawienia regionalne.

Dlatego po przeniesieniu do innego systemu twoje nazwy plików zostaną pomieszane.

Istnieje rozszerzenie formatu Zip, którego używają najnowsze programy (winzip od wersji 11, jak sądzę).

Wolę 7z, ponieważ miałem zip pełen japońskich nazw, które nie były w stanie rozpakować.

Kugel
źródło
0

Plik zip powinien być w stanie dokładnie odtworzyć zawartość.

Jedna powiązana uwaga - trudniej jest odzyskać dane, jeśli plik zip zostanie uszkodzony , niż jeśli dane były w oryginalnym formacie. Dlaczego? Wiele formatów plików ma wbudowaną redundancję i są tak zaprojektowane, że albo drobne błędy można naprawić, albo drobne błędy nie są krytyczne.

Wyobraź sobie plik wideo. W większości formatów, jeśli mała część ulegnie uszkodzeniu, zobaczysz tymczasowe migotanie w tej małej części filmu, ale nadal możesz go obejrzeć. Ale jeśli plik wideo jest skompresowany, funkcja korekcji błędów jest zmniejszona, aw zależności od stopnia uszkodzenia, rozpakowanie pliku / obejrzenie filmu może być niemożliwe. (Jest to wymyślony przykład, ponieważ w większości przypadków nie ma potrzeby kompresowania większości formatów wideo).

Dotyczy to każdego formatu kompresji - kompresja z definicji zmniejsza nadmiarowość, a tym samym możliwości korekcji błędów i jej kompromis.

tanon
źródło
Jak wspomniano powyżej, niektóre formaty plików zip obsługują redundancję. Może to uczynić go jeszcze bezpieczniejszym niż oryginalny format.
DMan