Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from zip import ZipFile
- for name in ZipFile('zipfile.zip').namelist():
- print('Listing zip files: %s' % name)
- ZIP_FILENAME_UTF8_FLAG = 0x800
- for info in ZipFile('zipfile.zip').filelist():
- filename = info.filename
- if info.flag_bits & ZIP_FILENAME_UTF8_FLAG == 0:
- filename_bytes = filename.encode('437')
- guessed_encoding = chardet.detect(filename_bytes)['encoding'] or 'cp1252'
- filename = filename_bytes.decode(guessed_encoding, 'replace')
- ...
- if flags & 0x800:
- # UTF-8 file names extension
- filename = filename.decode('utf-8')
- else:
- # Historical ZIP filename encoding
- filename = filename.decode('cp437')
- filename = corrupted_filename.encode('cp437').decode('cp866')
- c:> 7z.exe a -tzip -mcu archive.zip <files>..
- $ python -mzipfile -c archive.zip <files>..`
- import chardet
- original_name = name
- try:
- name = name.encode('cp437')
- except UnicodeEncodeError:
- name = name.encode('utf8')
- encoding = chardet.detect(name)['encoding']
- name = name.decode(encoding)
- from shutil import copyfileobj
- fp = archive.open(original_name)
- fp_out = open(name, 'wb')
- copyfileobj(fp, fp_out)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement