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

kwon37xi의 이미지

페도라 등 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 파일을 함께 올려둡니다.

File attachments: 
첨부파일 크기
Binary Data junzip_src.tar.gz43.24 KB
Binary Data junzip.tar.gz44.24 KB
Binary Data junzip_0.2.tar.gz89.47 KB
Forums: 
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 파일입니다.
테스트 해주시면 고맙겠습니다.

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

kwon37xi의 이미지

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

nulluser wrote:
$ 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의 이미지

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

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

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

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

송지석의 이미지

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

kwon37xi의 이미지

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

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

segfault의 이미지

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

랜덤여신의 이미지

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

익명 사용자의 이미지

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

lacovnk의 이미지

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

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

ganadist의 이미지

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

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

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

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

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

only2sea의 이미지

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

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

recypace의 이미지

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

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

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

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

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

ganadist의 이미지

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으로 풀리도록 했습니다.

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.