Windows의 메모장으로 저장된 텍스트 파일은 일반적으로 ANSI 인코딩으로 저장됩니다. Windows 환경 자체가 ANSI 인코딩으로 이루어져 있어 생기는 결과입니다. 영어는 CP1251, 한국어는 CP949, ANSI 인코딩이라는 집합 속 각기 다른 이름으로 지정되어 있습니다.

우리가 EUC-KR이라고 알고 있는 한글 인코딩은 CP949의 하위 호환입니다.

 

하지만 이런 복잡한 환경은 편리하지 않습니다. 특정 상황에서 문장 속 다른 인코딩을 참조하는 문자가 혼용되어 있을 경우 문자열이 깨지게 됩니다.

예를 들어 'ABC가나다'라는 문장은 ANSI CP1251을 먼저 참조합니다. 하지만 뒤에 붙은 '가나다' 문장은 CP949를 참조해야 정상적인 출력이 가능합니다. 결국 한글은 깨진 문자로 출력됩니다.

 

이러한 상황을 방지하기 위하여 파일의 인코딩을 UTF-8로 변경합니다. 그렇다면 어떻게 변경해야 파일 속 내용은 그대로인 채로 인코딩만 변경할 수 있을까요?

 

Windows 환경에서 사용 가능한 iconv

http://gnuwin32.sourceforge.net/packages/libiconv.htm

 

LibIconv for Windows

• Complete package, except sources Setup  969371 14 October 2004  e0217c09792beec74578516d9fff55ce

gnuwin32.sourceforge.net

 

libiconv-1.9.2-1-bin.zip
0.79MB

libiconv-1.9.2-1-bin.zip 파일을 압축 해제하여 /bin 폴더 안에 있는 응용프로그램을 사용합니다. iconv 파일 옆에 있는 두 파일은 실행을 위하여 함께 있어야 합니다.

 

iconv -f CP949 -t UTF8 content.cp949.txt > content.utf8.txt

 

Windows iconv는 -output 옵션이 없기 때문에 파이프를 이용하여 처리된 콘텐츠를 저장할 수 있습니다.

 

Usage: iconv [OPTION...] [-f ENCODING] [-t ENCODING] [INPUTFILE...]
or:    iconv -l
Converts text from one encoding to another encoding.
Options controlling the input and output format:
  -f ENCODING, --from-code=ENCODING
                              the encoding of the input
  -t ENCODING, --to-code=ENCODING
                              the encoding of the output

Options controlling conversion problems:
  -c                         discard unconvertible characters
  --unicode-subst=FORMATSTRING
                              substitution for unconvertible Unicode characters
  --byte-subst=FORMATSTRING
                              substitution for unconvertible bytes
  --widechar-subst=FORMATSTRING
                              substitution for unconvertible wide characters

Options controlling error output:
  -s, --silent           suppress error messages about conversion problems

Informative output:
  -l, --list                list the supported encodings
  --help                 display this help and exit
  --version            output version information and exit

 

UTF-8로 저장된 파일은 CMD에서 chcp 65001 명령어를 사용한 이후 정상적으로 처리 가능합니다.

 

chcp 65001
type content.utf8.txt

 

CMD의 chcp 기본값은 chcp 949입니다.

반응형

+ Recent posts