UTF-8 리눅스를 위한 UNZIP 하기

kwon37xi의 이미지
3155
points
0
points

페도라 등 UTF-8 기반 리눅스에서는 윈도우에서 만들어진 한글 파일명을 가진 파일을 압축해 놓은 zip 파일이 좀 짜증납니다.
압축 풀면 MS949 로 그냥 풀어지거든요..
zip 파일의 파일들을 풀때 현재 시스템의 문자셋으로 파일명을 변환해주도록 자바로 간단하게 만들어봤습니다.

좋은 라이브러리가 공개되어 있어 몇줄 되지도 않는 프로그램이 되었습니다.
순수하게 압축 풀기 기능만 있습니다.

설치 방법
* junzip 파일(셸 스크립트)을 /usr/local/bin 에 복사합니다.
* junzip.jar 파일(자바 클래스)을 /usr/local/share/junzip 에 복사합니다.

$ junzip ZIPFILENAME.zip [encoding]

인코딩을 기본이 MS949 입니다. 그 외의 인코딩은 사실상 필요 없을 겁니다. 그러니 그냥 junzip ZIPFILENAME.zip 만으로 실행하세요.

소스도 함께 동봉합니다.
필수적으로 받아야할 것은 junzip, junzip.jar 두개입니다.

2004/04/13 디렉토리 구조를 지원하도록 수정한 0.2 추가
소스와 jar 파일을 함께 올려둡니다.

첨부 파일파일 크기
junzip_src.tar.gz43.24 KB
junzip.tar.gz44.24 KB
junzip_0.2.tar.gz89.47 KB
nulluser의 이미지
1130
points

[code:1]$ junzip test.zipSave/7.3 압축 풀

0
points

$ junzip test.zip
Save/7.3 압축 풀기 시작...
java.io.IOException: No such file or directory
	at java.io.UnixFileSystem.createFileExclusively(Native Method)
	at java.io.File.createNewFile(File.java:842)
	at net.kldp.junzip.JUnzip.main(JUnzip.java:72)

가끔 이런 식의 에러를 내고는 압축이 풀리지 않는 경우가 있습니다.

첨부파일은 제가 압축한 zip 파일입니다.
테스트 해주시면 고맙겠습니다.

[EDIT]잘되네요. 고맙습니다. 첨부했던 파일은 삭제하도록 하겠습니다.[/EDIT]

kwon37xi의 이미지
3155
points

디렉토리 때문인듯합니다.

0
points

디렉토리 구조 때문인 것 같습니다.
제가 이걸 만든게 순전히 당나귀에서 받은 한글 제목의 OGG 파일 압축해 놓은 것을 풀기 위해 만든건데.. 그게 대부분 디렉토리 구조를 갖고 있지 않거든요.
수정해서 사용할 수 있도록 해보겠습니다.

nulluser 씀:
$ junzip test.zip
Save/7.3 압축 풀기 시작...
java.io.IOException: No such file or directory
	at java.io.UnixFileSystem.createFileExclusively(Native Method)
	at java.io.File.createNewFile(File.java:842)
	at net.kldp.junzip.JUnzip.main(JUnzip.java:72)

가끔 이런 식의 에러를 내고는 압축이 풀리지 않는 경우가 있습니다.

첨부파일은 제가 압축한 zip 파일입니다.
테스트 해주시면 고맙겠습니다.

kwon37xi의 이미지
3155
points

JUnzip 0.2 업로드

0
points

처음 만든것은 zip 파일이 디렉토리 구조를 포함하고 있을 경우를 지원하지 못했습니다.

디렉토리 구조를 지원하도록 수정하여 올립니다. - 맨위의 글을 보시면 파일이 올라와 있습니다.

100여줄 밖에 안되므로 뭐 딱히 버그는 없으리라 생각되지만, 있다면 좀 알려주세요.

다음 버전에서는 rzjoin 풀기를 지원하도록 해보겠습니다. linux-sarang.net 에 C 소스가 올라와 있더군요. 언제나 할랑가... ^^

송지석의 이미지
7305
points

감사합니다.가려운 데를 긁어주는 좋은 프로그램이네요.

0
points

감사합니다.
가려운 데를 긁어주는 좋은 프로그램이네요.

kwon37xi의 이미지
3155
points

하드 날리면서 소스도 날아가버렸습니다.이거... JUnzip 소스

0
points

하드 날리면서 소스도 날아가버렸습니다.

이거... JUnzip 소스 갖고 계신분 있으시면 좀 올려주세요..
^^;

segfault의 이미지
6100
points

KDE 환경이라면 konqueror에서 zip 안으로 들어간 후에 Set

0
points

KDE 환경이라면 konqueror에서 zip 안으로 들어간 후에 Set Remote Charset 옵션 설정하면, 한글이름이 잘 보입니다..

랜덤여신의 이미지
13945
points

wine 으로 WinRAR 를 쓰시는 방법도 있습니다.zip 이든 r

0
points

wine 으로 WinRAR 를 쓰시는 방법도 있습니다.
zip 이든 rar 이든, UTF-8 환경에서도 아주 잘 풀어줍니다. :D

익명 사용자의 이미지

지난번 서버에 문제가 생겼던 이유때문인지, 다운로드가 안됩니다.혹시라

0
points

지난번 서버에 문제가 생겼던 이유때문인지, 다운로드가 안됩니다.
혹시라도 저장해놓은게 있으신분이 계신다면 업로드 부탁합니다.

lacovnk의 이미지
15218
points

아아.. 필요한데 날아갔나보네요 ㅠㅠ

0
points

Anonymous 씀:
지난번 서버에 문제가 생겼던 이유때문인지, 다운로드가 안됩니다.
혹시라도 저장해놓은게 있으신분이 계신다면 업로드 부탁합니다.

아아.. 복구가 되면 좋겠습니다 :oops:

ganadist의 이미지
6340
points

OT이지만.. unzip 패치

0
points

제가 전에 unzip에 locale을 참고로 해서 제대로 풀게 만든 패치가 있습니다.

현재 unzip메인테이너에게 보낸 상태고 다음버젼에 적용될수 있도록 하겠다는 답장을 받아두었습니다.

그리고 gentoo와 debian 버그질라에도 올렸고요.

http://bugs.gentoo.org/show_bug.cgi?id=69945 를 참고하세요

only2sea의 이미지
3390
points

참 좋은 패치이군요.

0
points

아직 적용이 안 된 것 같은게 안타깝습니다.

이제는 서명에 무엇을 써야하는지 생각해보자.

Re: OT이지만.. unzip 패치

0
points

ganadist 씀:
제가 전에 unzip에 locale을 참고로 해서 제대로 풀게 만든 패치가 있습니다.

전 저번에 unrar patch만들어서 여기 올렸었는데요.
궁금해서 여쭙는데 자신의 locale은 어떤 환경 변수를 참조해야 하나요? 아니면 filesystem mount된 것의 encoding을 참조해야 하나요. :-)

그리고, zip파일 안에는 혹시 encoding같은 정보가 들어 있나요?? 아니라면, 특정한 encoding으로 들어나요? 아니면 시험을 통해서 알아 보는 건가요?

unrar도 저번처럼 cp949->utf8 로 정하지 않고 더 일반적이게 해야
patch로 가치가 있을것 같아서.. ^^

아.. 자세히 분석하지 않고 여쭈어서 죄송.. -__-;;

ganadist의 이미지
6340
points

zip포맷에는 압축한 파일이름의 글자셋 정보가 없는것으로 알고 있습니다.

0
points

zip포맷에는 압축한 파일이름의 글자셋 정보가 없는것으로 알고 있습니다. 그래서 저같은 경우에는 LANG 환경변수로 zip archive의 글자셋을 추측하고 nl_langinfo()로 현재 OS의 글자셋 정보를 얻어와서 iconv로 변환했습니다.

LANG환경변수가 ko_KR.UTF-8일 경우 앞의 ko로 zip archive는 "CP949" 글자셋이라고 추측하고 nl_langinfo()에서는 "UTF-8"글자셋이라고 리턴합니다.

LANG이 ko_KR이면 nl_langinfo()에서는 "EUC-KR"글자셋이라고 리턴할꺼니깐 로케일에 상관없이 풀리겠죠.

만약 iconv에서 실패하면(글자셋 변환 실패) raw filename으로 풀리도록 했습니다.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.