친구가 영화 자막을 다운로드했는데 압축 해제가 안된다고 해서 나도 호기심이 생겨 그 원인을 찾아봤다. 압축해제를 했을 때 다음과 같은 오류가 생성되는 경우가 있다.
이 당황스러운 오류 메시지를 먼저 받은 사람들이 나와 친구 외에도 꽤 많은 사람들이 있었고, Mac OS 카탈리나 업그레이드 이후로 애플 커뮤니티에도 이 오류와 관련된 질문들이 포스팅되었다.
위와 같은 오류 메시지를 만나는 상황은 근본적인 문제는 아니지만, 2가지 정도가 있다.
- 윈도우에서 압축한 zip 파일을 Mac 환경으로 옮겨서 압축 해제했을 때
- 웹에서 다운로드한 zip 파일을 압축 해제했을 때
문제의 원인을 다루기 전에 이 문제의 해결 방법은 4가지 정도를 말할 수 있지만 모든 방법이 간단하고 허무하다.
- 한글 문자를 포함하지 않는 파일만 zip 압축한다.
- 윈도우 또는 Mac 환경에서 다양한 문자 인코딩을 지원하는 비교적 최근 써드파티 압축 프로그램을 사용한다.
- Cloud Drive(Apple, Google, DropBox 등)를 파일 송/수신 채널로 활용한다.
- 한글 데이터의 손실을 감수하고 Terminal > unzip [사용자 파일 경로/파일명]. zip으로 압축 해제한다.
이 오류는 왜 발생하는 것일까?
일반적으로 Mac OS에서 zip 압축파일을 생성하고 해제하는 일은 애플 공식 가이드에 따르면 아주 간단한 일이다. Mac OS(10.15) 카탈리나 이전에도 한글 깨짐 등의 문제는 있었지만 애플 공식 가이드를 따르면 오류 없이 압축 해제할 수 있었다.
Mac OS가 카탈리나로 업그레이드되면서 기본 유틸리티인 아카이브 유틸리티(Archive Utility)가 유니코드(UTF-8)인코딩 방식이 아닌 파일이 압축파일에 포함된 경우 오류(오류-22 유효하지 않은 변수)를 출력하는 방식으로 정책을 변경하였고, 그 이유는 어차피 압축을 풀어도 파일명과 내용이 깨지기 때문에 사전에 차단하는 것으로 판단된다.
왜 Window에서 보낸 한글 파일이 깨지는 것일까? 그 원인은 문자 인코딩 방식에 있다.
컴퓨터 환경에서 언어를 표현하기 위해서는 언어를 표현하는 문자에 대응되는 2진수 규칙을 정의해야 한다. 이 규칙을 기반으로 문자나 기호를 문자 -> 2진수로 표현하는 방법을 Character Encdoing이라고 한다. 대표적으로 ASCII코드(American Standard Code for Information Interchange) 가있는데, 이 풀네임에서 알 수 있듯 American Standard Code 이기 때문에 영문 알파벳을 표현하는 대표적인 문자 인코딩 방식이지만 영어권이 아닌 한국, 중국, 일본 등의 문자를 표현하기엔 한계가 있다.
과거에 표현의 한계를 극복하기 위해 사용한 인코딩 방법 중 하나가 MBCS(Multi-Byte Character Set)이다.
유니코드를 제외한 문자 인코딩에서 두 개 이상의 바이트를 사용해서 문자를 표현하는 방식으로 한국어, 중국어, 일본어에 주로 쓰이는 인코딩 방식이다. 이 방식은 특정 언어를 가진 단일 국가 내 사용을 가정하여 같은 인코딩 방식이어도 국가가 다르면 문자가 제대로 표현되지 않고 깨지는 문제가 여전히 존재한다. Window도 후술할 유니코드를 사용하고 있지만 과거 버전인 Window9* 시리즈와 호환성도 고려해야 하기 때문에 여전히 MBCS 인코딩 방식을 지원한다.
그럼 Mac에서의 인코딩 방식은 무엇인가? 유니코드(UTF-8) 인코딩 방식으로 이 인코딩 방식은 모든 언어/문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다. 유니코드의 목적은 현존하는 문자 인코딩 방법을 모두 유니코드로 대체하는 것이고, 애플도 이 목적에 공감하는지 기본 인코딩 방식으로 유니코드(UTF-8)을 지원하고 이번 문제의 원인이 된 아카이브 유틸리티는 유니코드(UTF-8) 인코딩이 아닌 다른 인코딩 방식에 오류를 출력하도록 업데이트되었다.
그럼 Window와 Mac의 인코딩 방식 차이가 원인인가?
인코딩 방식이 다르기 때문에 압축파일을 생성/해제할 때 타 플랫폼을 고려해 인코딩/디코딩해주면 문제는 해결된다. 하지만 윈도우의 역사가 길고 MBCS를 지원했었기 때문에 과거 윈도우 플랫폼을 가정하고 만들어진 ZIP 서드파티 프로그램의 압축 파일은 문제가 된다. 비교적 최근에 만들어진 써드파티 압축 프로그램은 압축/해제 단계에서 인코딩 방식을 식별/지정 할 수 있지만, 그렇지 않은 프로그램이 대부분이기 때문에 Mac과 Window,Linux와 Window 간의 문자 깨짐 현상이 존재하는 것이다.
댓글