본문

VCF(vCard) 파일 합치기, 분리하기, CSV로 변환하기

폰에있는 주소록을 컴퓨터로 저장할때 물론 일반 텍스트파일(CSV포함)이 많이 쓰이지만 이런 경우에 폰 제조사가 서로 다를경우 가끔 데이터를 불러오지 못하는 경우가 있다. 그래서 그나마 표준적으로 쓰이는 VCF파일을 사용하여 컴퓨터와 폰을 연결하는데, 이것도 문제가 있는것이 어떤 폰은 vcf파일을 분리해서 컴퓨터로 저장하고, 어떤 폰은 단일 vcf파일만 불러올 수 있다는 점이다. 특히나 이번 경우에는 노키아의 PC Suite에서 주소록 파일을 분리된 여러개의 vcf파일로 저장하고, 이것을 삼성의 KIES에서 불러오는 작업이었는데, KIES에서는 한번에 하나의 vcf파일만을 받아올 수 있는것이 문제가 되었다.


그래서 vcf파일을 합치는 파일을 찾아보았는데 이는 찾기 힘들었고 대신에 vcf파일을 분리하는 프로그램을 먼저 찾았다. vcf cutter라는 프로그램인데, vcf 파일 합치는 프로그램을 쓸일이 없어서 실제로 사용해보진 않았다  아래에 있는 vcf합치는 프로그램에서 나오는 결과를 이곳에서 시행해보면 분리가 되지 않던데 vCard 버전이 다르기 때문에 그런건가 추측하고 있다. 그래도 혹시나 하는 마음에서 올려본다. 프로그램 홈페이지는 이곳(다운로드는 VCFCutter.zip)이다.

그리고 vcf파일을 합치는 (무료)프로그램을 찾을 수 없어서 배치파일을 만들기로 했다. 폰에서 단일 vcf파일로 주소록을 추출해봤는데 구조를 보니 일반 vcf파일을 한줄씩 합쳐놓은 단순한 구조라서 프로그래밍 할필요도 없이 배치파일로 간단히 끝날것같았다. 그래서 만들고 아래의 배치파일을 첨부한다. 사용법은 다수의 vcf파일이 들어있는 폴더아이콘을 배치파일 아이콘 위애 드래그&드랍(끌어서 올려놓기) 해주면 된다. 배치파일과 vcf파일폴더를 동일한 폴더에 놓고 실행시키는것을 권장하며 결과 vcf파일은 배치파일의 위치에 result.vcf로 저장된다. 다음 게시물에서 아래 배치파일에 대한 설명을 적어놓을 예정이다.

vcfmerger_frontjang.bat



덧붙여서 이건 위키피디아에 링크가 올라와있길래 같이 적어놓는데, Online vCard Converter(vCard to LDIF/CSV Converter)를 사용한다면 온라인으로 vCard파일을 LDIF/CSV파일로 변환할수도 있다. 대부분의 폰을 위하든 프로그램을 위하든, 주소록 관리 프로그램에서는 CSV파일 또한 지원해 주므로 이를 사용하는 방법도 있다. 사이트 상에서는 애플 주소록을 모질라의 썬더버드(Thunderbird)에서 사용할 수 있는 용도로 사용할 수 있다고 밝히고 있다. 아무튼 php로 구성된 소스파일도 제공하니 사생활 침해에 대해 걱정인 경우 자신이 직접 실행할 수도 있다 (한글이 들어간 파일의 경우 아래를 참고하세요)


==============

12/07/25 추가, 16/02/17 수정(서버가 주거씀다..)
위 사이트에서 vcf -> csv 변환 후 파일이 깨져서 출력되는 경우에는 다음 사이트를 이용해주세요.(엑셀등에서 파일을 불러올때 인코딩 옵션을 지정해서 해결할 수 있으나, 그래도 문제가 발생할 경우 이 사이트를 사용해야 합니다) 문제 발생 시 알려주시면 바로 처리하겠습니다. http://host2.frontjang.info/vcfconvert/page.html


자세한 내용:

Online vCard Converter 사이트 상에서 한글 미지원 문제에 대한 댓글을 보고 소스를 파악한 결과, 내부적으로 처리는 원활하게 되지만 파일 출력 도중 인코딩을 변경하는 부분에서 문제가 발생하는것을 확인하였습니다. 이 프로그램에는 파일의 내용을 읽어와서 utf-8으로 변환하는 과정이 존재합니다. 하지만 한글 인코딩(euc-kr 혹은 cp949)에 대한 지원이 없었기 때문에 한글이 들어간 파일을 불러오고 이를 utf-8으로 변환하는 과정에서 문제가 생긴 것입니다. 

따라서 html 페이지에서 cp949에 대한 지원을 추가하였고, index.php에서의 fromText()의 $this->charset 부분에 else $this->charset="cp949"를 추가하였으며, utf-8 변환조건을 if (isset($this->charset) && $this->charset != 'UTF-8' && $this->charset != 'ISO-8859-1'&&$this->charset != 'CP949') 으로 변경하였습니다. 즉 한글 인코딩이 사용된 파일을 처리할 경우 내부적으로 인코딩을 변경하지 않은 채로 파일을 처리한다는 것입니다. 

인코딩을 변경하지 말아야 하는 이유는, ENCODING=QUOTED-PRINTABLE 으로 한글이 저장되는 경우에 오류가 발생하기 때문입니다. Contact_Vcard_Parse.php의 _decode_qp()에서 Quoted printable을 처리하는 과정에서 사용되는 quoted_printable_decode()의 결과로 문자가 기존의 8비트 표현방식이 사용되는데, 만약 이 전단계에서 이미 utf-8 표현방식으로 모든 파일이 변환되었다면 8비트 표현방식과 양립할 수 없어 파일이 깨진채로 출력되는 것입니다. 

테스트는 다음의 두가지 파일로 진행되었으며 테스트에서 검출되지 않은 문제가 발생할 수 있으니 결과파일을 반드시 확인해 주시기 바랍니다.

http://lemonstore.net/yj.vcf
http://lists.mindrot.org/pipermail/openssh-unix-dev/attachments/20000710/de0b89b1/attachment.vcf

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.