Mam pliki ZIP, które zawierają pliki, których nazwy plików są w pewnym stopniu kodowane. Powiedzmy, że znam kodowanie tych nazw plików, ale nadal nie wiem, jak poprawnie je zdekompresować.
Oto przykładowy plik , który zawiera jeden plik „【SSK 字幕 组】 The Vampire Diaries 吸血鬼 日记 S06E12.ass”
Wiem, że używane kodowanie to GB18030 (chiński)
Pytanie brzmi - jak rozpakować ten plik we FreeBSD za pomocą unzip lub innego narzędzia CLI, aby uzyskać odpowiednią zakodowaną nazwę pliku? Próbowałem wszystkiego, co mogłem, ale wynik nigdy nie był dobry. Proszę pomóż.
Próbowałem na OSX:
MBP1:test 2ge$ bsdtar xf gb18030.zip
MBP1:test 2ge$ ls
%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12/ gb18030.zip
MBP1:test 2ge$ cd %A1%BESSK%D7%D6Ļ%D7顿The\ Vampire\ Diaries\ %CE%FCѪ%B9%ED%C8ռ%C7S06E12/
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ ls
%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12.ass*
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ find . | iconv -f gb18030 -t utf-8
.
./%A1%BESSK%D7%D6L抬%D7椤縏he Vampire Diaries %CE%FC血%B9%ED%C8占%C7S06E12.ass
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ convmv -r -f gb18030 -t utf-8 --notest .
Skipping, already UTF-8: ./%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12.ass
Ready!
Próbowałem podobnie z rozpakowaniem, ale mam podobny problem.
Dzięki, teraz próbuję na BEZPŁATNEJ BSD, gdzie łączę się za pomocą SSH z OSX (Terminal):
# locale
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=C
Pierwszą rzeczą, którą chciałbym, to właściwe pokazywanie chińskich nazwisk. Zmieniłem
setenv LC_ALL zh_CN.GB18030
setenv LANG zh_CN.GB18030
Następnie pobrałem plik i spróbowałem napisać „ls”, aby zobaczyć odpowiednie znaki, ale nie powodzenia. Myślę więc, że muszę rozwiązać pierwsze chińskie ustawienia narodowe, aby sprawdzić, kiedy otrzymam właściwy wynik, właściwie mogę go porównać. Czy możesz mi w tym pomóc?
unzip
nie ma tej opcji w Mac OS X i zawsze tworzy nazwy plików zakodowane procentowo. Sugestia @ javacomunar
działała jako urok.unzip
mówi, że toUnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler
i nie zapewnia takich opcji.unzip
in Debian 9 jest dokładnie tą samą wersją i nie ma takich opcji. Prawdopodobnie specyficzny dla Ubuntu?W większości systemów plików POSIX nazwa pliku to tylko seria bajtów i zależy to od przestrzeni użytkownika, aby ją zrozumieć. Możesz to wykorzystać na swoją korzyść.
Najpierw wypakuj archiwum używając
bsdtar
, ponieważunzip
narzędzie wydaje się zmieniać nazwy plików, a bsdtar wyodrębni je. (Testuję to w systemie Linux. Wydaje mi się, że FreeBSD po prostu to nazywatar
).Sprawdź, czy narzędzia takie jak
iconv
mogą z powodzeniem dekodować nazwy:(Pamiętaj, że wpływa to tylko na dane
find
wyjściowe, a nie na same pliki).Na koniec użyj
convmv
do konwersji nazw plików na UTF-8:(Uwaga: musiałem zainstalować Encode :: HanExtra z CPAN do obsługi GB18030 i ręcznie dodać
use Encode::HanExtra;
do / usr / bin / convmv, nawet jeśli powinienW przypadku
convmv
niedostępności, wykonaj skrypt:(Przynajmniej w systemie Linux ma to tę zaletę, że
iconv
jest prawie zawsze dostępne i zawsze obsługuje gb18030.)źródło
Metoda 1 : Użyj narzędzia Unar
Metoda 2 : Użyj skryptu Pythona, aby rozpakować plik (odniesienie https://gist.github.com/usunyu/dfc6e56af6e6caab8018bef4c3f3d452#file-gbk-unzip-py )
Przykład gb18030.zip rozpakuje następujący plik
źródło
unar
metoda jest najbardziej bezproblemowa przynajmniej w systemie Mac OS X.W systemie OS X można użyć aplikacji GUI o nazwie The Unarchiver . Można go zainstalować za pomocą Mac App Store lub Homebrew Cask :
Po otwarciu pliku ZIP aplikacja pozwala wybrać odpowiednie kodowanie za pomocą podglądu nazwy pliku z archiwum.
źródło
7z obsługuje ID zestawu znaków za pomocą przełącznika
-scs
, np .:gdzie 903 to 簡體 簡體 zestaw znaków. Dłuższą listę identyfikatorów zestawów znaków można znaleźć tutaj .
źródło
7z
-scs
Przełącznik wybiera tylko kodowanie@
listy plików zdefiniowanych.Użyj 7z, aby wyodrębnić plik
Następnie przekonwertuj kodowanie tych nazw plików:
To działa dla mnie .. from_encoding w moim przypadku to tis-620 (co jest kodowaniem tajskim), musisz znaleźć odpowiednie kodowanie swojego języka. Popularny zwykle rozwiązuje problem, ale jeśli nazwa pliku jest nadal nieczytelna, spróbuj zmienić kod z__kodowania na inne rzeczy, takie jak Windows-1252 lub Shift-Jis (japoński) lub cokolwiek innego, możesz wyświetlić dostępne kodowanie za pomocą polecenia:
Jest to dla mnie bardzo prosta metoda „jak rozwiązać”.
źródło
właśnie użyłem 7zip i udało mi się wybrać odpowiednie kodowanie.
(coś, czego nie mógł zrobić standardowy zip)
ale używał go w systemie Windows z narzędziem GUI. Być może wiersz poleceń 7z też będzie dla ciebie działał.
źródło