Az Archívumkezelő 7z karakterkódolási hibája a ZIP fájloknál

kimarite képe

Az Archívumkezelő GNOME alkalmazás (file-roller), és a ZIP fájlok kibontására - meglátásom szerint, tesztelésem alapján - a 7z alkalmazást használja, amely a p7zip-full csomag része. Nincs is az alkalmazással gond, csak az, ha egy Windows vagy macOS rendszeren tömörített ZIP fájl tartalmát bontom ki, akkor ebbe bizony beletörik a bicskája.

A probléma megkerülhető:
-- a convmv alkalmazás használatával, amellyel a mentett fájl nevét UTF-8 karakterkódolásról, iso-8859-15 karakterkódolásra tudjuk átalakítani,
-- vagy másik, például a Xarchiver archívumkezelő alkalmazás használatával, amely nem a 7z-et használja a fájlok kicsomagolására.

A ZIP fájlok neve a Linux terjesztéseken helyesen jelenik meg, a tartalom megjelenítéséről van most szó.

convmv

Telepítsd valamelyik csomagkezelő használatával, vagy a terminálban:

sudo apt-get install convmv

Az alkalmazás a fájl nevét alakítja át, a fájl tartalmát nem változtatja meg.

Használat

Abban a könyvtárban kell állnod, ahol az átalakítandó fájl van.
Beléphetsz oda a Fájlkezelőből, a környezeti menü használatával, a Megnyitás terminálban elem kiválasztásával, vagy terminálban a cél könyvtárba lépéssel,

-- ha a fájl a Letöltések könyvtárban tartózkodik, akkor így:

cd Letöltések/

Az átalakítandó fájl teljes nevének kiegészítésére a TAB-ot lehet használni, a karakterkódolás miatt viszont most ez nem használható, így a fájlok parancssorban használ neve TestPrezenta*.odp:

-- teszt (nem történik átalakítás):

convmv -f UTF-8 -t iso-8859-15 TestPrezenta*.odp
Starting a dry run without changes...
mv "./TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp"    "./TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp"
No changes to your files done. Would have converted 1 files in 0 seconds.
Use --notest to finally rename the files.

-- az átalakítás a notest paraméter használatával történik:

convmv --notest -f UTF-8 -t iso-8859-15 TestPrezenta*.odp
mv "./TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp"    "./TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp"
Ready! I converted 1 files in 0 seconds.

Az átalakítás folyamatában látható, a folyamatban részt vesz az mv (move/áthelyezés) alkalmazás, azaz, az eredeti fájl törlődik.

Az eredmény (listázom):

ls | grep Test
TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp

Ha több olyan fájlod is van, amely neve rossz karakterkódolással jelenik meg, akkor csoportos átalakítást is végezhetsz: az átalakítandó fájlokat egyetlen könyvtárba másold át, majd az r paraméterrel rekurzívan, a könyvtár tartalmára alkalmazd a parancssort.

Példa

Ha az új, átalakítandó fájlokat tartalmazó könyvtár neve convmv_átalakítások, és a Letöltések könyvtárban található:

-- teszt,

convmv -f UTF-8 -t iso-8859-15 -r Letöltések/convmv_átalakítások/*

-- és átalakítás:

convmv --notest -f UTF-8 -t iso-8859-15 -r Letöltések/convmv_átalakítások/*

Arra figyelj, a parancssorban mindenképpen jó elérési utat adj meg!

Kézikönyv

Terminálban:

man convmv

Online: https://linux.die.net/man/1/convmv

Xarchiver

Telepítsd valamelyik csomagkezelő használatával, vagy a terminálban:

sudo apt-get install xarchiver

Figyelj arra, hogy a kibontás helyét változtasd meg, mert alapértelmezetten a tmp könyvtár az!

Saját magán kívül nem telepít más csomagot.

Enjoy :-)

-----

Karakter kódolás

Miféle lehet? Az encguess alkalmazással végzett teszttel kiderül:

encguess TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp
TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp    UTF-32BE

... látható, a kibontott fájl UTF kódolású.
https://hu.wikipedia.org/wiki/UTF-32/UCS-4
https://hu.wikipedia.org/wiki/UTF-8

... valamelyest logikus és ésszerű.

Az átalakított fájl karakterkódolása:

encguess TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp
TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp    UTF-32BE

A file parancs most nem segített a kutakodásban:

file -bi TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp
application/vnd.oasis.opendocument.presentation; charset=binary
file TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp
TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp: OpenDocument Presentation

7Z

Úgy tűnik, tényleg a 7z alkalmazással van probléma. Teszteltem az l paraméterrel (listázás):

7z l TestPrezenta*.zip

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=hu_HU.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz (306A9),ASM,AES-NI)

Scanning the drive for archives:
1 file, 18204 bytes (18 KiB)

Listing archive: TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp.zip

--
Path = TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp.zip
Type = zip
Physical Size = 18204

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2020-10-10 15:39:16 .....        19970        17401  TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp
2020-10-10 15:39:58 D....            0            0  __MACOSX
2020-10-10 15:39:16 .....          210          109  __MACOSX/._TestPrezentaÌcioÌKoraÌbbanIsmertProbleÌmaÌkKeÌrdeÌseÌreUÌdv.odp
------------------- ----- ------------ ------------  ------------------------
2020-10-10 15:39:58              20180        17510  2 files, 1 folders

... nem jól jeleniti meg a ZIP fájl tartalmának neveit.

unzip

Az alkalmazás tökéletesen működik:

unzip TestPrezent*.zip
Archive:  TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp.zip
  inflating: TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp  
   creating: __MACOSX/
  inflating: __MACOSX/._TestPrezentációKorábbanIsmertProblémákKérdéséreÜdv.odp

Azt gondolom, a Xarchiver alkalmazás is ezt használja.
Az is igaz, a kimenet nem egy könyvtár, azt meg kell adni külön.

Locale

A nyelvi támogatás megváltoztatása, azaz bővítése lenne még egy megoldás (a file-roller indítása az iso-8859-15 környezeti változóval),

env LANG=hu_HU.iso-8859-15 file-roller TestPrezenta*.zip
(file-roller:7043): Gtk-WARNING **: 17:57:34.490: Locale not supported by C library.

de ehhez érthetően nekem sincsen kedvem. Jelenleg az UTF-8-ra támogatott a rendszer. Amúgy ez az alapértelmezés is.