반응형


예전에 한글파일명 때문에 글을 쓴적이 있습니다. 링크

저 포스팅을 한 후에 그다음 우분투의 버전에서는 unzip 으로 한글 파일명을 풀때 쓰는 '-O' 옵션이 빠져있었는데.....오늘 확인해 보니 해당옵션이 들어가 있네요.
한동안 우분투를 안쓰다보니 언제부터 들어가 있었는지는 모르겠지만요. ^^;

하지만 '-O' 옵션을 쓰려면 콘솔을 써야 한다는게 좀 그렇긴 하군요. 찾아보면 방법이 없는건 아니겠지만 어차피 많이 풀일도 없고....전 그냥 콘솔에서.....^^;


그냥 윈도우도 이젠 리눅스처럼 utf-8 을 써주지 않으려나.....??  ^^;

요즘 이런저런 일때문에 포스팅도 좀 뜸했고 해서 잡담겸 해서 써봤습니다.



반응형

윈도우에서 zip 파일로 한글 파일들을 묶으면 리눅스에선 깨져 보입니다.

그 이유는,

첫째로 zip 파일은 유니코드로 파일명을 저장하지 않기 때문이고,

둘째는 리눅스는 윈도우와 달리 UTF-8 인 유니코드 체제를 쓰기 때문에 코드가 달라서 글자가 깨지는 것입니다.

이런 문제를 막으려면 파일명을 유니코드로 저장하는 rar 이나 7zip 을 이용해서 파일을 압축하면 됩니다. 하지만 다른사람들이 다 그렇게 해주지는 않죠? ^^; 그래서 이런 파일을 한글이 안깨지게 푸는 방법을 적어보도록 하겠습니다.



예전에 unzip을 이용하는 방법을 적었던 적이 있었는데요. 이번 우분투 9.10을 설치한 이후 unzip을 봤더니 -O 옵션이 없더군요. --;

그러던 중 우분투 포럼에 이를 해결하는 내용이 올라와 있기에 올려 봅니다.

http://ubuntu.or.kr/viewtopic.php?f=18&t=7861

Perl 스크립트인데요. 저 짧은 스크립트가 zip 압축을 풀어내는 프로그램이 되다니 펄의 놀라운 능력을 보는듯 합니다. 정확히는 CPAN 의 위력이라고 해야 할까요?

위 링크에 사용법이 있지만 간단히 정리하자면....

우선 콘솔에서 'sudo apt-get install libarchive-zip-perl' 을 입력해 해당패키지를 설치하거나, synaptic 을 이용해서 libarchive-zip-perl 패키지를 찾아 설치합니다.

그리고, perl 스크립트를 긁어다가 파일로 만듭니다. 링크된 글에 있듯이 kozip 이던 kzip 이던 맘에드는 이름으로 저장하면 됩니다.

#!/usr/bin/perl
use strict;
use Encode;
use Archive::Zip;
my $zip = Archive::Zip->new();
$zip->read($ARGV[0]) == 0 or
   die "$0: couldn't read $ARGV[0]\n";
foreach my $mref ($zip->members) {
    my $n = decode("cp949",$mref->fileName);
    print "Extracting $n\n";
    $zip->extractMember($mref,$n) == 0 or
   die "$0: couldn't extract $n\n";
}


이제 저장한 파일에 실행권한을 줘야 합니다. 만일 저장 파일이 kozip 이었다면 'chmod +x kozip' 하면 됩니다.

그런 다음 위 글에서 처럼 /usr/local/bin 이나 아니면 자신의 홈디렉토리에 'bin' 디렉토리를 만들어 복사해 넣고 사용하면 됩니다.

압축을 풀때는 kozip xxx.zip 이런식으로 하면 됩니다.
그러면 한글 파일명이 깨지지 않고 잘 풀립니다. 위 링크에는 일본어 파일을 푸는 스크립트도 있으니 필요하신 분은 참고 하시기 바랍니다.



정말 훌륭하고 요긴한 팁이 아닐 수 없습니다.

예전에는 wine 으로 윈도우용 압축프로그램을 이용해 풀기도 하고 했었는데요. 이젠 그럴 필요 없겠네요. ^^;

알려주신 분께 감사 드립니다.



반응형
윈도우에서 한글파일명을 가진 파일을 zip으로 압축한후에 리눅스에서 풀면 파일명이 깨져서 제대로 풀리지 않습니다. 그이유는 zip 파일은 파일명을 유니코드로 저장하지 않기 때문입니다. 윈도우에서는 파일명에 유니코드를 사용하지 않기 때문에 utf-8을 쓰는 리눅스에서 압축을 풀면 파일명이 깨져 보이는 것 입니다.

이를 방지하는 방법은 파일을 윈도우에서 압축할때 winrar 이나 7zip등으로 rar,7z 으로 압축하면 해결됩니다. 하지만 zip파일을 풀어야 할때도 있죠.

리눅스에선 zip파일의 압축을 풀때 unzip을 씁니다. 다른 GUI 압축해제 프로그램에서도 쓰고요. 예전엔 그래서 이 unzip을 패치하는 방법도 있었는데 최근에는 압축을 해제할때 옵션을 줄 수 있게 되었더군요.

일단 한글파일명 파일을 그냥 한번 들여다 보죠. file2.zip에는 한글파일을 하나 넣어 두었습니다.

터미널에서 'unzip -l file2.zip' 을 입력했습니다.


이렇게 나옵니다. 파일명이 깨져서 나오죠.

그럼 다음엔 이렇게 입력해 보죠. 'unzip -l -O cp949 file2.zip'



한글 파일명이 제대로 보이는 것을 알 수 있습니다.  '-O cp949' 옵션을 썼습니다. -O 는 영문 대문자 O입니다. 혹시 헛갈리실 까봐.... -O 옵션에 각 언어에 맞는 인코딩 값을 넣어주면 다른나라 윈도우에서 압축한 외국파일명도 제대로 풀 수 있습니다.

캡쳐는 하지 못했지만 일본어 윈도우에서 만든 일본어 파일명을 가진 zip 파일의 경우 한글 윈도우에서 압축을 풀면 파일명이 깨져 나옵니다. 재대로 풀 수 없죠. 윈도우에서는 어플로케일로 압축프로그램을 실행해서 압축을 해제하는 방법이 있습니다만...

리눅스에선 unzip을 이용해서 압축을 풀수 있습니다. -O 옵션에 shift-jis 나 euc-jp 를 넣으면 될겁니다. 일본어 인코딩에 대해선 잘 몰라서 어느게 맞는지는 잘 모르겠는데요. 제가 시험해 본 파일은 shift-jis 로 하니 파일명이 제대로 나오더군요.

예전엔 한글파일명의 zip파일을 풀때 wine으로 압축프로그램을 실행해서 풀기도 했었습니다. 그러면 파일명이 제대로 나왔었거든요. wine 의 특성상 그런거겠죠.

이젠 그냥 unzip으로 풀면되니 wine 쓸일이 하나 줄었네요. ^^;


+ Recent posts