İbranice adlara sahip dosyaların ZIP arşivini nasıl doğru şekilde açabilirim?


18

Birisi bana İbranice isimleri olan dosyaları içeren bir ZIP dosyası gönderdi (ve Windows'ta oluşturuldu, hangi araçla emin değilim). Debian Stretch'te LXDE kullanıyorum. Gnome arşiv yöneticisi dosyayı açmayı başarıyor, ancak İbranice karakterler bozuk. Ben düşünüyorum Adını dört karakterleri ve bir .doc suffic olan bir dosya var mesela ben, Unicode karakterleri içine uzatılmış UTF-8 sekizli alıyorum ve karakterler şunlardır: 0x008E 0x0087 0x008E 0x0085. Komut satırı unzip yardımcı programını kullanmak daha da kötüdür - "Geçersiz veya eksik çok baytlı veya geniş karakter" hakkında şikayet ederek tamamen sıkıştırmayı reddeder.

Yani, sorularım:

  • Dosyalarımı doğru adlarla açacak başka bir açma yardımcı programı var mı?
  • Dosyanın sıkıştırılma biçiminde bir sorun mu var, yoksa yalnızca ZIP uygulamalarının uyumsuzluğu mu? Ya da hatta Linux ZIP yardımcı programlarının yanlış özellikleri / hataları?
  • Bozuk olanları kullanarak açıldıktan sonra doğru dosya adlarını almak için ne yapabilirim?

Cp862 tablosundaki bu baytlara bakarsanız , dosya adı beklediğinizle eşleşiyor mu? Aksi takdirde, kaynak makinenin yerel kodlamasını biliyor musunuz?
Michael Homer

Cp1255 için Ditto ve diğer akla uygun kodlamalar; neyin doğru göründüğüne bağlı olarak çalışmak mümkün olabilir.
Michael Homer

@MichaelHomer: Hayır, eşleşiyor gibi görünmüyor. Kaynak makinenin yerel kodlaması, bölgesel ayarları İbranice-İsrail olarak ayarladığınızda MS Windows ne kullanıyorsa, bu yüzden sanırım bazen UTF-8 ve bazen CP1255.
einpoklum

Yanıtlar:


15

Dosya adları, Windows'un tescilli kod sayfalarından birinde ( CP862 , 1255 vb.) Kodlanmış gibi görünüyor.

  • Dosyalarımı doğru adlarla açacak başka bir açma yardımcı programı var mı? Bu kod sayfalarını doğal olarak destekleyen bir zip yardımcı programının farkında değilim. 7z kodlamaların biraz anlaşılmasına sahiptir, ancak sisteminizin daha genel olarak bildiği bir kodlama olması gerektiğine inanıyorum ( LANGortam değişkenini ayarlayarak seçersiniz ) ve Windows kod sayfaları muhtemelen bunlar arasında değildir.

    unzip -UUadlarında doğru baytlara sahip dosyalar oluşturmak için komut satırından çalışmalıdır (tüm Unicode desteğini devre dışı bırakarak). Muhtemelen GNOME'un aracından aldığınız etki budur. Kodlama her iki şekilde de doğru olmaz, ancak bunu aşağıda düzeltebiliriz.

  • Dosyanın sıkıştırılma biçiminde bir sorun mu var, yoksa yalnızca ZIP uygulamalarının uyumsuzluğu mu? Ya da hatta Linux ZIP yardımcı programlarının yanlış özellikleri / hataları? Size verilen dosya taşınabilir bir şekilde oluşturulmadı. Her ne kadar biçim belirtimi adların UTF-8 veya cp437 olması gerektiğini ve sizinkinin ikisi de olmadığını söylese de, kodlamanın sabit olduğu ve önceden bilindiği bir dahili kullanım için bu yanlış olmayabilir. Windows makineleri arasında bile, farklı kod sayfalarının kullanılması iyi sonuç vermez, ancak Windows dışındaki makinelerin bu kod sayfalarıyla ilgili hiçbir konsepti yoktur. Çoğu araç UTF-8 dosya adlarını kodlar (bu hala problemlerden kaçınmak için her zaman yeterli değildir).

  • Bozuk olanları kullanarak açıldıktan sonra doğru dosya adlarını almak için ne yapabilirim? Dosya adlarının kodlamasını belirleyebiliyorsanız, mevcut adlardaki baytları UTF-8'e dönüştürebilir ve mevcut dosyaları doğru ada taşıyabilirsiniz. Aracı esasen tek bir komutla içine bu süreci tamamladı: dönüştürme herşey iç çalışacağız cp862 den UTF-8.convmvconvmv -f cp862 -t utf8 -r ..

    Alternatif olarak, kullanabileceğiniz iconvve findkendi doğru isimlere her şeyi taşımak için. Gibi bir şey:

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

    geçerli dizinin altındaki tüm dosyaları bulur ve adları UTF-8'e dönüştürmeye çalışır.

    Her iki durumda da, farklı kodlamaları deneyebilir ve anlamlı olanı bulmaya çalışabilirsiniz.


Kodlamayı sizin için düzelttikten sonra, bu dosyaları başka yöne geri göndermek istiyorsanız, diğer tarafta da aynı sorunu yaşamanız mümkündür. Bu durumda, dosyaları sıkıştırmadan önce işlemi tersine çevirebilirsiniz -UU, çünkü Windows ucunda düzeltilmesi çok zor olacaktır.


Sanırım baktığım ZIP dosyası şimdi burada ilgisiz nedenlerden dolayı gittiğinden bunu yapmak zorunda kalacak. Teşekkürler, bir dahaki sefere yapacağız ve en iyisini umuyoruz.
einpoklum

1
rarveya p7zip.zip arşivlerini işlemeyi reddedin. Linux'ta özel kodlamalarda dosya adlarına sahip bir arşiv çıkarmanın bir yolu var mı? Birlikte ayıklamak zaman unzip, bir hata alıyorum: "hata: / Ship_╨п ╨Я╤А╨╛╤З╨╗╨░ ╨Я╤А╨╛ ╨н╤В╨╛ ╨и╨╕╨┐ yaratamaz ╨ NameЮ╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Dosya adı çok uzun "
Nickolai Leschov

.Zip dosyasını doğru bir şekilde çıkarmayı başardım LANG=ru_RU.CP1251; unzip Bleed.zip(benim durumumda Kiril kodlamasıydı). Şimdi, bu tür .zip dosyalarını GUI'de varsayılan olarak doğru bir şekilde açabilmek için sistemimi nasıl ayarlayacağımı merak ediyorum?
Nickolai Leschov

@NickolaiLeschov Bir soru sorun ve birisi size yardımcı olabilir. Muhtemelen sisteminiz hakkında daha fazla bilgi vermeniz gerekecektir.
Michael Homer

unzip -UU foo.zipTürkçe karakterler için çalıştı
Mert S. Kaplan

8

Komuta ile başarılı oldum 7z x <source.zip>.

Sürüm:

p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,[...])

Potansiyel olarak alakalı ortam:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=UTF-8

Dosya adlarında 8 bit karakter içeren tüm dosyaları açabildi, bu karakterlerden bazıları atlandı, bazıları bozuk.


p7zip benim için çalışan tek kişi
alex88

6

Ben sadece aynı sorunu vardı ve bu benim sürümü unzipUbuntu depolarından ( UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.) kullanılabilir çıktı Eğer -aanahtarı belirtirseniz dosya adlarının otomatik kod çözme işleyebilir .

unzip -a stupid.zip

Bunu şu anda test edecek hiçbir şeyim yok.
einpoklum

1
Man sayfalarına göre anahtar metin dosyaları dönüştürme ilgilenir. Dosya adları değil. unzip-a
beruic

@beruic, dosya adları (# U + 0040 # U + 0050 ...) olarak unicode numaralarını açtım ve sonra "unzip -a" gerçekten yardımcı oldu.
chang zhao

1
Bunu biraz mangada denedim. Dosya adları doğru bir şekilde kodu çözüldü, ancak resimler de metin (!) Olarak yorumlandı ve tamamen bozuldu. Hatta arşiv içindeki zip ve rar dosyalarını metin olarak yorumlar, algılama tamamen işe yaramaz.
rjh

2

Kiril karakterli bir zip arşivinin kodunu çözmede de benzer bir sorun yaşadım. Tek satırlık bir python betiği işi düzgün yaptı:

#!/usr/bin/python

import zipfile
import sys

zipfile.ZipFile(sys.argv[1], 'r').extractall(sys.argv[2] if len(sys.argv) > 2 else '.')

Sonra sadece ara unzip_encve araunzip_enc ZIP_FILE [TARGET_DIR]

Benim için ne unzip -UU, unzip -ane de LANG*çevre değişkenleri hiçbir işe yaramadı.


Bir dahaki sefere çıkarmak için böyle bir zip dosyasına sahip olduğumu deneyeceğim ... teşekkürler. Ancak - komut dosyanızı şu şekilde değiştirebilirsiniz: 1. iki argüman olup olmadığını kontrol edin 2. sadece zip dosyası sağlanmışsa geçerli çalışma dizinine ayıklayın?
einpoklum

2

Bu kombinasyonda şansım vardı:

export LANG=es_MX 
7z x file.zip
convmv -f cp437 -t utf8 -r .

add - gerçek yeniden adlandırma için convmv öğesine notest. Daha sonra daha iyi bir sürüm buldum:

LANG=es_MX.cp437 unzip -UU file.zip
convmv -f cp437 -t utf8 -r . --notest

+1 sadece convmv ve komut satırı 7zip aracı için.
einpoklum

Muhtemelen bir için farklı seçenekler denemek için vardır LANGdeğişken ve gelen el altında dosyanın bağlı kodlama. LANG=ru_RU.CP1251Birlikte -f cp866çalıştığım bir dosya var .
Dmitri Chubarov

0

Linux'ta (komut satırından) sıkıştırılmış zip arşivim var ve aksan karakterleri olan dosya adları Windows'ta doğru şekilde açılmamış, ancak araç çubuğunda karakter kümesini ayarlayabilen Bandizip yazılımı ile başarılı bir şekilde açtım .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.