압축 파일의 인코딩이 맞지 않아 제대로 풀리지 않거나 정상적이지 않은 파일 이름이 표시되는 스크린샷

여전히 텍스트 인코딩은 고통스러운 문제입니다

텍스트 인코딩은 골치아픈 문제였습니다. 컴퓨터 제조사마다 다른 인코딩 규격을 사용했기 때문에 있었던 혼란은 ASCII가 나오면서 먼 옛날 이야기가 되어버렸고, 국가나 언어마다 다른 인코딩 규격을 사용했던 문제는 유니코드가 나오고 나서 어느 정도 정리되는 것 같아 보였습니다. 유니코드 컨소시엄이 첫 유니코드 규격을 내놓은 지 30년이 다 되어가고, 대부분의 컴퓨터 시스템이 파일 이름을 비롯한 각종 텍스트를 저장할 때 기본적으로 유니코드 기반의 텍스트 인코딩인 UTF-8을 사용하고 있으니까요.

하지만 완전히 해결된 문제는 아닙니다.

여전히 누군가는 텍스트 인코딩 때문에 비명을 지르고 있습니다. 한국에서 널리 쓰이는 각종 시스템은 아직도 자주 쓰이는 한글 2,350자만 지원하는 인코딩을 사용하기 때문에 자신의 이름을 온전히 학생증에 새기지 못하고, 그런 불편함을 적은 뉴스 기사조차도 신문사의 시스템 때문에 깨지는 문제가 있기도 했습니다.

대한민국 정부의 공공정보시스템은 2010년부터 UTF-8을 사용하도록 보완해서 한글로 표현할 수 있는 대부분의 이름을 주민등록증에 새길 수 있다고 합니다. 하지만 통신사나 은행에서 사용하는 시스템이 2,350자만 지원하는 경우가 많기 때문에 명의자 이름이 주민등록상 이름과 일치하지 않아 겪는 어려움도 크다고들 해요. 이런 문제는 텍스트 인코딩 문제가 아니더라도 시스템마다 이름이 다르게 표기되기도 하는 버들 류(柳)씨 분들이나 외국인들도 자주 겪는다고 합니다.

소프트웨어 개발자들에게는…

플레인 텍스트 기반으로 이루어진 형식이나 유니코드 이전에 만들어진 파일 규격들도 골칫덩어리입니다. 소스 코드에서는 파일 어딘가에 # -*- coding: utf-8 -*- 같은 라인을 적거나, HTTP 요청이라면 헤더 어딘가에 인코딩을 명시하기도 합니다. json 같은 텍스트 형식들은 기본적으로 UTF-8으로 인코딩해야 한다고 정해 놓기도 하고요.

인코딩을 명시해놓은 다행스러운 상황이 있기도 하지만 모든 파일 형식이 이렇게 해놓지 않은 것이 문제입니다. 인코딩을 정확히 명시하지 않거나, 인코딩을 명시하는 규격이 최근에 나와 잘 지원이 되지 않는 경우도 있기 때문이지요. 이런 문제로 인해서 처리하기가 까다로운 파일 포맷 중, 가장 널리 쓰이는 포맷은 파일을 압축할 때 많이 쓰는 zip 파일이 아닐까 싶습니다.

1989년에 처음 나온 이 파일 형식은 유니코드보다 먼저 세상에 나왔기 때문에 출시 당시에는 유니코드를 지원할 수 없었습니다. 어느 정도 시간이 지난 후에는 파일 이름에 UTF-8을 사용하는지 여부, UTF-8로 인코딩한 파일 이름 등을 저장하는 필드를 규격에서 지원하기 시작했지만, 예전에 만들어져 이런 기능을 지원하지 않는 압축 소프트웨어와 그런 소프트웨어에서 압축한 파일을 계속해서 지원해야 했기 때문에 모든 소프트웨어에서 이런 기능을 지원하지는 않습니다.

이런 텍스트 인코딩에 대한 힌트를 규격에서 지원해준다 한들 그런 이정표가 없는 상황을 대비해서 이런 파일을 처리하는 소프트웨어 개발자는 인코딩을 직접 추측해야 하는 상황에도 대비해야 했습니다. 여러 언어 문화권에서 들어오는 파일을 처리하기 위해서는 이 텍스트가 한국에서 널리 쓰는 EUC-KR인지, 일본에서 널리 쓰는 Shift-JIS인지, 중국에서 널리 쓰는 GB18030인지, 미국과 유럽 지역에서 널리 쓰는 ISO-8859-1/2인지 아니면 그냥 UTF-8을 쓰는지를 추측해야만 하죠.

특정 인코딩에서 어떤 패턴으로 바이트가 나타나는지로 인코딩을 추측하는 방법이 가장 일반적입니다. 모든 바이트의 맨 앞 비트가 0으로 이루어진 텍스트라면 ‘ASCII 코드로만 이루어진 텍스트겠구나’ 할 수 있는 것처럼요. 다른 인코딩은 이보다 조금 더 복잡할테지만, 이미 오랜 시간동안 많은 사람들이 공들여놓아서 만든 chardet이나 uchardet이 있으니 직접 구현하는 것보다 이쪽을 쓰는 게 나을 것 같습니다.

UTF-8이 당연한 세상을 위하여

시스템이나 파일 형식을 새로 만들 때 텍스트를 유니코드 기반 인코딩으로 저장하는 건 너무나도 당연한 일이 되어버렸습니다. 설령 한국 국내에서만 쓰는 시스템이라 하더라도 요즘 사람들이 쓰는 이모지🤔를 넣기 위해서는 유니코드를 써야 하고, 하위 호환을 위해서 어느 정도 예전의 지역별 인코딩에 관대했던 Windows와는 달리 요즘 많이 쓰이는 iOS나 Android 같은 운영체제들은 개발될 때부터 다국어를 염두에 두고 만들어져서 설계 자체에서부터 유니코드를 염두에 두고 있으니까요.

유니코드가 널리 쓰이기 전에 나왔거나 하는 이유로 유니코드를 염두에 두지 못하고 개발된 zip 파일 같은 형식도 널리 쓰이는 소프트웨어가 최신 규격을 잘 따라가게 업데이트되거나 (이미 널리 쓰이는 포맷이라 가능성이 적기는 하지만) 유니코드를 기반으로 개발된 파일 포맷으로 완전히 대체되던가 하는 방법으로 나아갔으면 좋겠고, 이미 만들어진 많은 시스템들도 차츰차츰 업데이트하거나 교체해서 흔치 않은 이름을 가진 분들도 자기 이름을 모든 시스템에서 온전히 쓸 수 있었으면 좋겠습니다.

함께 읽어보면 좋은 글

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.