Child pages
  • GNU iconv 로 character set encoding 변환하기


개요

GNU 에서 만든 문자열 변환 유틸리티(iconv) 및 라이브러리(libiconv)이다. 리눅스에는 glibc 에 포함되어 있으며 윈도는 gnuwin32 에서 받을 수 있다.


iconv 유틸리티 사용

지원하는 encoding 목록 보기

iconv -l

iconv 는 Multi Byte 한국어 인코딩인 EUC-KR과 CP949, ISO-2022-KR, JOHAB 방식을 모두 지원


변환 옵션

option

--from-code, -f encoding - 변환할 원본 인코딩을 명시, iconv 는 encoding detect 유틸이 아니므로 원본 인코딩을 정확하게 명시해야 함

--to-code, -t encoding - 변환될 인코딩을 설정

--output, -o filename - 출력 파일명, 지정되지 않으면 콘솔로 출력됨


(info) 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 언어에서 사용할 수 있다.

 Click here to expand...


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 로 저장후에 실행

iconv-test.php
<?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