JMK no matter what

우분투에서 윈도에서 압축한 zip 파일 풀기

유니코드가 없던 시대의 파일 포맷이 사람을 괴롭게 하는 또 하나의 사례로 zip 이 있다. 윈도우에서 한글 파일명을 갖는 파일을 압축하면 euc-kr 을 써버리는데, 우분투에 따라나오는 데비안 unzip 은 이거를 무조건 utf-8 이라고 생각하고 디스크에 써버린다. 사람들이 패치도 만들어서 보냈지만 메인테이너가 'ㅈㄲ' 라고 버티는 바람에 사람들은 21세기인 지금까지도 패치본 만들어서 깔고, 서드파티 jar 받아다 푸는 역경을 이겨내고 있다.... 아 눈물이....

그래서 파이썬으로 짜보았습니다.

lang:py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys
import getopt
import zipfile

def decompress(zf, enc):
    for info in zf.infolist():
        utf8_name = info.orig_filename.decode(enc)
        segments = utf8_name.split("/")
        if len(segments) > 1:
            try:
                os.makedirs("/".join(segments[:-1]))
            except OSError:
                pass
        print utf8_name
        open(utf8_name, "w").write(zf.open(info).read())

def main(args):
    options, args = getopt.getopt(args, "e:")
    opt = dict(options)

    encoding = opt.get("-e", "euc-kr")

    for file in args:
        zf = zipfile.ZipFile(file)
        decompress(zf, encoding)

if __name__ == "__main__":
    main(sys.argv[1:])

./unzip.py -e euc-kr filename.zip 하면 현재 디렉토리에 푸는 코드. 캡단순 ㄱㅅ 오류처리따위 하지 않았습니다. -_-

2010-03-08 14:59:26 | JM | /writings/cs/ | 8 Comments
이희승
2010-03-08 15:59:09
그냥 LANG=ko_KR.EUC-KR 로 놓은 다음에 zip -F 인가로 fix 한 뒤 다시 UTF-8 으로 돌아가서 풀면 되지 않나?
이희승
2010-03-08 15:59:41
제일 좋은건 이제 그만 포기하고 7z 쓰는 것 아닐까 싶음 ㅋ
이정민
2010-03-08 16:43:21
2.6 이상의 버전을 사용하시면 아래처럼 해도됩니다.

def decompress(zf, enc):
for info in zf.infolist():
info.filename = info.filename.decode(enc)
zf.extract(info)
JM
2010-03-09 00:18:19
@희승옹, unzip 에서 당연히 해줄 수 있을 거라고 생각했어요! zip 으로 fix 하는 방법이 있었군요 ㅋㅋ 저거는 옛날 시디에 백업해놓은 개인자료라서-.-;; 다 변경해서 raid nas 같은데다 담아놓을래요
@이정민, 오 그렇군요! 완전 신기. filename 을 바꿀 수 있을거라곤 생각도 안해봤네요 -.-;; 고맙습니다 :-)
mocoa
2010-03-21 11:29:19
http://kldp.org/node/82481#comment-417361
http://www.kippler.com/zipage/
저의 경우
윈도우에서 압축 -> 리눅스에서 해제 : unzip -O 옵션
리눅스 압축 -> 윈도우에서 해제 : 압축시대를 씁니다.~
JM
2010-03-22 13:54:02
@mocoa, 다들 자기만의 방법이 있군요. ^^;
dfs
2010-05-02 16:27:51
다필요없고 이거 하나면 끝인데

http://kldp.org/node/82481
JM
2010-05-03 01:18:23
@dfs, 위에서도 언급했지만 패치본 깔기 싫어서 그랬습니다.

Leave a comment

春來不似春

About

Eventstream

Pages

Guestbook

Search

Site Admin

Recent Comments