Ktoś wysłał mi plik ZIP zawierający pliki o hebrajskich nazwach (i utworzony w systemie Windows, nie jestem pewien, z jakim narzędziem). Używam LXDE na Debian Stretch. Menedżerowi archiwum Gnome udało się rozpakować plik, ale hebrajskie znaki są zniekształcone. Wydaje mi się, że rozszerzam oktety UTF-8 na znaki Unicode, np. Mam plik, którego nazwa ma cztery znaki i .doc wystarczające, a znaki to: 0x008E 0x0087 0x008E 0x0085. Korzystanie z narzędzia do rozpakowywania wiersza poleceń jest jeszcze gorsze - odmawia całkowitej dekompresji, narzekając na „Nieprawidłowy lub niekompletny znak wielobajtowy lub szeroki”.
Tak więc moje pytania to:
- Czy istnieje inne narzędzie do dekompresji, które rozpakuje moje pliki pod prawidłowymi nazwami?
- Czy jest coś nie tak ze sposobem skompresowania pliku, czy jest to po prostu niezgodność implementacji ZIP? A może nawet błędne / błędne narzędzia Linux ZIP?
- Co mogę zrobić, aby uzyskać poprawne nazwy plików po rozpakowaniu przy użyciu zniekształconych nazw plików?
character-encoding
zip
unicode
file-format
einpoklum
źródło
źródło
Odpowiedzi:
Wygląda na to, że nazwy plików są zakodowane na jednej z zastrzeżonych stron kodowych systemu Windows ( CP862 , 1255 itp.).
Czy istnieje inne narzędzie do dekompresji, które rozpakuje moje pliki pod prawidłowymi nazwami? Nie znam narzędzia zip, które natywnie obsługuje te strony kodowe. 7z ma pewną wiedzę na temat kodowania, ale uważam, że musi to być kodowanie, o którym Twój system wie bardziej ogólnie (wybierasz go, ustawiając
LANG
zmienną środowiskową), a stron kodowych Windows prawdopodobnie nie ma wśród nich.unzip -UU
powinien działać z wiersza poleceń, aby tworzyć pliki z poprawnymi bajtami w swoich nazwach (poprzez wyłączenie obsługi wszystkich znaków Unicode). Jest to prawdopodobnie efekt, który już uzyskałeś z narzędzia GNOME. Kodowanie nie będzie poprawne, ale możemy to naprawić poniżej.Czy jest coś nie tak ze sposobem skompresowania pliku, czy jest to po prostu niezgodność implementacji ZIP? A może nawet błędne / błędne narzędzia Linux ZIP? Podany plik nie został utworzony przenośnie. Niekoniecznie jest to niewłaściwe w przypadku użytku wewnętrznego, w którym kodowanie jest ustalone i znane z góry, chociaż specyfikacja formatu mówi, że nazwy mają być UTF-8 lub CP437, a twoje nie są. Nawet między komputerami z systemem Windows używanie różnych stron kodowych nie działa dobrze, ale maszyny z systemem innym niż Windows nie mają pojęcia o tych stronach kodowych na początek. Większość narzędzi UTF-8 koduje nazwy plików (co wciąż nie zawsze wystarcza, aby uniknąć problemów).
Co mogę zrobić, aby uzyskać poprawne nazwy plików po rozpakowaniu przy użyciu zniekształconych nazw plików? Jeśli potrafisz zidentyfikować kodowanie nazw plików, możesz przekonwertować bajty istniejących nazw na UTF-8 i przenieść istniejące pliki na właściwą nazwę. Narzędzie zasadniczo owija się ten proces do jednego polecenia: spróbuje przekonwertować wszystko wewnątrz od cp862 na UTF-8.
convmv
convmv -f cp862 -t utf8 -r .
.
Alternatywnie możesz użyć
iconv
ifind
przenieść wszystko do ich poprawnych nazw. Coś jak:znajdzie wszystkie pliki w bieżącym katalogu i spróbuje przekonwertować nazwy na UTF-8.
W obu przypadkach możesz eksperymentować z różnymi kodowaniami i próbować znaleźć takie, które ma sens.
Po poprawieniu kodowania, jeśli chcesz wysłać te pliki z powrotem w innym kierunku, możliwe jest, że będziesz miał ten sam problem na drugim końcu. W takim przypadku możesz odwrócić proces przed skompresowaniem plików
-UU
, ponieważ prawdopodobnie będzie to bardzo trudne do naprawienia po stronie systemu Windows.źródło
rar
lubp7zip
odmówić obsługi archiwów .zip. Czy istnieje sposób na wyodrębnienie archiwum z nazwami plików w zastrzeżonych kodowaniach w systemie Linux? Podczas wypakowywania za pomocąunzip
pojawia się błąd: „błąd: nie można utworzyć ╨и╨╕╨┐ / Ship_╨п ╨Я╤А╨╛╤З╨╗╨░ ╨Я╤А╨╛ ╨н╤В╨╛ ╨ ▓╨Ю╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Nazwa pliku za długa ”LANG=ru_RU.CP1251; unzip Bleed.zip
(w moim przypadku było to kodowanie cyrylicy). Teraz zastanawiam się, jak skonfigurować system, aby domyślnie poprawnie otwierać takie pliki .zip w GUI?unzip -UU foo.zip
pracował dla tureckich postaciMiałem sukces z dowództwem
7z x <source.zip>
.Wersja:
Potencjalnie istotne środowisko:
Był w stanie zdekompresować wszystkie pliki zawierające 8-bitowe znaki w nazwach plików, niektóre z nich zostały pominięte, a niektóre zniekształcone.
źródło
Właśnie miałem ten sam problem i okazuje się, że moja wersja
unzip
tego jest dostępna z repozytoriów Ubuntu (UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
) może obsługiwać automatyczne dekodowanie nazw plików, jeśli podasz-a
przełącznik.źródło
unzip
z-a
przełącznikiem dba o konwersji plików tekstowych. Nie nazwy plików.Miałem podobny problem z dekodowaniem archiwum zip ze znakami cyrylicy. Jednowierszowy skrypt Pythona poprawnie wykonał zadanie:
Następnie po prostu zadzwoń
unzip_enc
i zadzwońunzip_enc ZIP_FILE [TARGET_DIR]
Dla mnie ani
unzip -UU
,unzip -a
aniLANG*
zmienne środowiskowe zrobiła niczego dobrego.źródło
Miałem szczęście z tą kombinacją:
dodaj --notest do convmv dla faktycznej zmiany nazwy. Później znalazłem jeszcze lepszą wersję:
źródło
LANG
zmiennej i od kodowania w zależności od pliku pod ręką. Mam plik, w którymLANG=ru_RU.CP1251
razem z nim-f cp866
pracowałem.Mam skompresowane archiwum zip w systemie Linux (z wiersza poleceń), a nazwy plików ze znakami diakrytycznymi nie są poprawnie dekompresowane w systemie Windows, ale pomyślnie rozpakowałem je za pomocą oprogramowania Bandizip , które może ustawić kodowanie znaków na pasku narzędzi.
źródło