wangsy blog

왕수용의 개인 블로그

맥에서 우분투로 옮긴 한글 파일명 문제

| 1 Comment

맥에서 SFTP 나 다른 방법을 통해서, 파일을 옮기다 보면, 한글이 같은 유니코드 이지만, 풀어져 보이는 문제가 있다. 이거 상당히 골치 아픈 문제인데, 여기에 대한 해답을 나름 찾아봤다.

방법은 convmv 를 설치하는 것. apt-get 을 통해서 convmv 를 설치해 주고, 아래와 같은 명령을 통해서 변경 가능.

convmv --notest -nfc -f utf8 -t utf8 파일명

여기서 notest 옵션을 주지 않으면, mv 명령어만 보여주고, notest 옵션을 주면, 실제로 mv 명령이 실행된다.

NFC 의 경우, Normalization Form C 라고, 한글의 경우 자소를 모두 모아서 코드를 만들고, 유럽어의 경우 액센트 기호가 붙은 알파벳을 하나로 취급하며 주로 유닉스(리눅스)쪽에서 많이 쓰이고, 반면 NFD는 Normalization Form D로 한글 자로를 풀어서 각각 코드를 부여하며, Mac OS X 에서 사용한다. 위에서 –nfc 옵션을 주면, NFC 로 변환해 준다.

잠깐 문제가, 변환을 시도하면, 파일길이가 255자 넘는다면서 실행을 포기하는 현상이 발생하여, Perl 로 되어 있는 코드에서 해당 부분을 제거하니, 문제가 발생하지 않았다. (실제 mv 명령 실행에도 별 문제가 없었던 것으로 보아, 아마도 파일길이를 계산하는 부분에 문제가 있는 것으로 보인다.)

  if (! $filenamelength) {
    print STDERR "$opt_t doesn't cover all needed characters for: \"". &$from_print($dir.$oldfile) ."\"\n";
    return undef;
# } elsif ($filenamelength < $maxfilenamelength) {
#   print STDERR &$from_print($dir.$oldfile).": resulting filename is $filenamelength bytes long (max: $maxfilenamelength)\n";
#   return undef;
  }
  &posix_check($new);
  return 1;

 

before

변경전

after

변경후 (mp3는 bugs에서 구매한 정품)

One Comment

  1. 저게…. 유니코드 한글 처리에
    첫가끝 방식 (조합형 강 = ㄱㅏㅇ)과 완성형 방식 (강 = 강) 등이 있더군요
    첫가끝 방식을 처음 상용화 한곳이 Apple 이 처음으로 알고 있습니다.

    즉 첫가끝으로 구성된 데이타를 일반 형식으로 바꾸어 주는… 컨버터가 필요하게 되죠
    제일 편한거는 옮기는 유틸에서 처리를 해주는게 편하더군요 ^^

답글 남기기

Required fields are marked *.