#!/usr/bin/env python import sys import zipfile import argparse parser = argparse.ArgumentParser(description="accept to and from encodings") parser.add_argument('-O', metavar='decode', default="shift-jis") parser.add_argument('-I', metavar='encode', default="cp437") args, files = parser.parse_known_args(); def unzip(filename, encode, decode): code = 0 with zipfile.ZipFile(filename) as myzip: for info in myzip.infolist(): try: info.filename = info.filename.encode(encode, 'strict').decode(decode, 'strict') myzip.extract(info) except Exception as e: code = 1 print("failed to extract {0}: {1}".format(info.filename, e)) return code def main(files, encode, decode): code = 0 for file in files: if unzip(file, encode, decode) == 1: code = 1 return code if __name__ == '__main__': sys.exit(main(files, args.I, args.O))