GNU iconv 로 character set encoding 변환하기
개요
GNU 에서 만든 문자열 변환 유틸리티(iconv) 및 라이브러리(libiconv)이다. 리눅스에는 glibc 에 포함되어 있으며 윈도는 gnuwin32 에서 받을 수 있다.
iconv 유틸리티 사용
지원하는 encoding 목록 보기
iconv -l
iconv 는 Multi Byte 한국어 인코딩인 EUC-KR과 CP949, ISO-2022-KR, JOHAB 방식을 모두 지원
변환 옵션
--from-code, -f encoding - 변환할 원본 인코딩을 명시, iconv 는 encoding detect 유틸이 아니므로 원본 인코딩을 정확하게 명시해야 함
--to-code, -t encoding - 변환될 인코딩을 설정
--output, -o filename - 출력 파일명, 지정되지 않으면 콘솔로 출력됨
encoding 은 -l 로 표시되는 인코딩명을 참조
encoding 뒤에 //TRANSLIT, //IGNORE 두 개의 옵션을 추가할수 있다.
- //TRANSLIT : to-code 에 맞는 char가 없을 경우 비슷한 char 을 찾아서 대치한다.
- //IGNORE : to-code 에 맞는 char가 없을 경우 무시한다.
사용예
CP949 로 된 한글 문서를 UTF-8 로 변환
iconv -f CP949 -t UTF-8 -o output.txt input.txt
Windows 용 iconv 는 오래 되서 -o 옵션을 지원하지 않는다. -o 대신 파이프로 출력을 리다이렉션하자.
iconv -f CP949 -t UTF-8 input.txt > output.txt
UTF-8로 된 문서를 US-ASCII 로 변환하고 없는 문자는 대치
iconv -f UTF-8-t US-ASCII//TRANSLIT -o output.txt input.txt
C 언어에서 사용
glibc 안에 iconv 가 구현되어 있으므로 C 언어에서 사용할 수 있다.
PHP 에서 사용
PHP 에는 libiconv 가 binding 되어 있으므로 사용할 수 있다. (참고: http://php.net/manual/en/function.iconv.php)
PHP 의 iconv 는 파일대신 string 변수를 파라미터로 받는다.
string iconv ( string $in_charset , string $out_charset , string $str )
다음 PHP 파일을 UTF8 로 저장후에 실행
<?php $text = "똠방각하"; echo 'Original : ', $text, PHP_EOL; echo 'CP949: ', iconv("UTF-8", "CP949", $text), PHP_EOL; # 아래 문장에서 변환 에러 발생 echo 'EUC-KR: ', iconv("UTF-8", "EUC-KR", $text), PHP_EOL;
실행하면 똠은 EUC-KR 에 없는 문자이므로 EUC-KR 로 변환시 //TRANSLIT 옵션이 없을 경우 아래와 같이 에러가 발생되며 //TRANSLIT 옵션이 추가되면 EUC-KR의 비슷한 문자로 대치된다.
$ php iconv-test.php Original : 똠방각하 CP949: EUC-KR: PHP Notice: iconv(): Detected an illegal character in input string in iconv-test.php on line 6