Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I pulled a zip file from the web which was packed on a system where filenames were encoded in a format my unzip program fails to read. Perhaps the file-system does not support those weird characters, or the shell. I'm not entirely sure.

Since I don't really care about the filename an acceptable solution would be to rename the file, or write the contents to a file named something else than the name specified in the archive. Is that possible with a common command line zip utility? If so, how. Other suggestions on what may be wrong (perhaps it's not the zip utility) are also welcome.

The symptoms are as follows:

$ unzip -l ; unzip 
  Length      Date    Time    Name
---------  ---------- -----   ----
   107937  10-24-2012 01:00   [-?M+?V+?e-?] Le Gout Des autres - Agn+?s Jaoui - 2000 (sep subs).srt
     6354  10-24-2012 01:00   le.gout.des.autres.(3688232).nfo
---------                     -------
   114291                     2 files
error:  cannot create [-?M+?V+?e-?] Le Gout Des autres - Agn+?s Jaoui - 2000 (sep subs).srt
        Invalid or incomplete multibyte or wide character

$ unzip --help 
UnZip 6.00 of 20 April 2009, by Info-ZIP.  Maintained by C. Spieler.  Send
bug reports using; see README for details.

I am not particularly interested in suggestions involving graphical archivers, because I have already successfully extracted the file using `wine WinRAR.exe'.

share|improve this question
You can't, with normal tools, rename a file while it's in the ZIP archive. Best you can do is to rename files as you extract them. – Daniel R Hicks Dec 11 '13 at 23:28
Though you could, with a slightly abnormal tool (a hex editor) go into the file and "zap" the "odd" characters (replace with "x", eg). It would take some slight knowledge of the ZIP format, but the names are in clear text, so it's not that difficult. You do need to zap them in two places, though, in the general case. – Daniel R Hicks Dec 12 '13 at 12:00
up vote 1 down vote accepted

Can you try unzip -p archivedfilename.ext > newfilename.ext?

share|improve this answer
That concatenates all the files into one. funzip is better for that purpose because you get only the first file on stdout, but you'll run into trouble if the desired file is not "first in the archive". – Ярослав Рахматуллин Oct 23 '12 at 23:55
So even if you specify the name of the archived file (with wildcards to deal with the issue of invalid characters), unzip still extracts all the files? – Karan Oct 23 '12 at 23:59
I misread your answer tbh. This works: unzip -p *srt > – Ярослав Рахматуллин Oct 24 '12 at 0:03

I managed to get all the files with Python:

import zipfile
z = zipfile.ZipFile('')
for i, f in enumerate(z.filelist):
    f.filename = 'file_{0:03}'.format(i)

You will also get some empty files corresponding to the directory entries.

share|improve this answer this topic is helpful

and this particular comment: Yannis Tsop (ogiannhs) wrote on 2010-05-25: #12

using 7-zip it can be solved!

eg: LANG=el_GR.CP737 7z x -oPATH

convmv -r --notest -f utf-8 -t CP737 PATH/*

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .