문자 코드와 인코딩
문자 코드는 ‘가’,’나’,’다’와 같은 문자를 숫자 1,2,3에 짝지어 놓은 것을 뜻하며, 인코딩은 숫자를 실제 전자기기 안에 저장, 처리하기 위해 만들어진 숫자 표현 형식이다.
사람이 쓰는 문자(라틴 문자), 숫자, 특수문자를 128개의 코드값에 1:1 대응시켜 만든 것이 최초의 문자 코드인 ASCII(American Standard Code for Information Interchange)다. 하지만 세상 사람들은 영어만 쓰지 않기 때문에, 비영어권 국가들이 여덟번째 비트 자리를 활용하면서 새로운 문자 코드를 만들어냈고 이는 각 문자 코드간의 호환성 문제를 일으켰다. 그렇기 때문에 국가별 인코딩 표준이 필요했고, 한국어에는 완성형인 EUC-KR(혹은 cp949)와 조합형인 유니코드가 활용된다.
UCS-2는 최초의 유니코드이고, 이후 문자열 자리의 부족으로 UTF-16이 등장하는데, 이는 호환성이 좋지 못해 이후 UTF-8으로 개선된다.
실질적으로 사용중인 파일의 인코딩이 무엇인지는 알 수 있는 정확한 방법이 없다. (파일의 헤더를 읽어 볼 수 있지만, 완벽히 구분되지 않는다. 직접 저장하지 않은 이상은 알 수 없다.)
한국 개발환경에 놓인다면 가장 자주 보게 될 인코딩은 (아마) 다음과 같다.
EUC-KR, cp949, UTF-8, ISO-8859-1, 어쩌면 EUC-JP 등.
변환 도구
iconv를 쓰자.
# iconv [옵션] [파일]
iconv -f EUC-KR -t UTF8 euc.txt > utf.txt
파이썬과 Unicode
먼저 유니코드에 대해 골머리를 앓고 싶지 않을 때 가장 먼저 할 수 있는 것은 python3를 이용하는 것이다. Python2.* 버전에서는 유니코드를 다음과 같이 다룰 수 있다.
# -*- coding: utf-8 -*-
print(u"헬로 월드")
Python3에서는 내부적으로 모든 문자열을 unicode로 처리한다. unicode가 아닌 문자열을 외부에서 받아올 때 이를 str로 인식한다.
open(filename, 'r', encoding='ISO-8859-1')
위와 같은 방법으로 구세대의 인코딩으로 작성된 파일을 잘 불러올 수 있다.