문자셋(character set) 변환
페이지 정보
작성자 MintState 댓글 0건 조회 15,493회 작성일 08-11-03 10:34본문
문자셋(character set) 변환
1. character set 정보는 어디서??
character set 의 배정은 IANA (Internet Assigned Numbers Authority)에서 합니다.
최신의 character-set 정보는 다음 주소에서 찾아보시구요.
http://www.iana.org/assignments/character-sets
2. character set 변환은 왜?
다국어 지원을 하는 경우에는 이 character set을 고려해야 하는 경우가 있습니다.
중국 시스템에서 한국 시스템으로 어떤 문자를 보내고자 할때,
보통 중국은 big5 인코딩 방식을 사용하고, 한국은 ksc_5601을 사용합니다.
big5로 인코딩되어 있는 문자(한자가 되겠죠?)를 ksc_5601에 맞춰서 출력하며
이상한 값이 출력되겠죠?
3. 변환 방법은?
각 인코딩 방식마다 저마다의 인코딩 룰이 있습니다. utf-8 에서 unicode(ucs-2)로
변환하는 경우, 두 인코딩 방식을 비교하여 변화하는 코드를 작성해야겠죠.
일일이 인코딩 방식을 봐가면서 하기에는 다소 무리가 있는듯 합니다.
그래서, 편하게 사용할 수 있는 방법이 unix 시스템의 경우,
iconv 라는게 있습니다.
4. iconv 사용법은?
- 명령어
사용법 : iconv -f 원시코드 -t 목적코드 [파일...]
console에서 직접 iconv 명령어를 사용하여 변환할 수 있습니다.
- iconv library 이용
프로그램을 작성하는 경우, 라이브러리를 사용하시면 됩니다.
libiconv.a
* 컴파일시 -liconv 주어야 합니다.
* iconv_open, iconv, iconv_close 등의 함수가 있습니다.
자세한 사항은 iconv man page를 참조하세요
5. iconv를 통해 변화할 수 있는 character set 정보는 어디에?
시스템마다 조금씩 다릅니다.
* iconv man page
* PHP 에서의 변환
기본적으로 서버에서 iconv 함수를 지원한다면 @iconv함수를 이용하시면 됩니다.(iconv함수는 PHP 기본 함수가 아님니다)
하지만 지원하지 않는다면 위에서 소개한 콘솔을 이용하시면됩니다.
@iconv함수를 이용한 방법
콘솔 iconv를 이용한 방법
* UTF-8 인지 확인하는 함수
ps. 위함수는 KEBIL이 작성하신것입니다.
* 자신의 호스팅 계정이 함수방법, 콘솔방법을 지원하는지 알아보기위한 소스
1. character set 정보는 어디서??
character set 의 배정은 IANA (Internet Assigned Numbers Authority)에서 합니다.
최신의 character-set 정보는 다음 주소에서 찾아보시구요.
http://www.iana.org/assignments/character-sets
2. character set 변환은 왜?
다국어 지원을 하는 경우에는 이 character set을 고려해야 하는 경우가 있습니다.
중국 시스템에서 한국 시스템으로 어떤 문자를 보내고자 할때,
보통 중국은 big5 인코딩 방식을 사용하고, 한국은 ksc_5601을 사용합니다.
big5로 인코딩되어 있는 문자(한자가 되겠죠?)를 ksc_5601에 맞춰서 출력하며
이상한 값이 출력되겠죠?
3. 변환 방법은?
각 인코딩 방식마다 저마다의 인코딩 룰이 있습니다. utf-8 에서 unicode(ucs-2)로
변환하는 경우, 두 인코딩 방식을 비교하여 변화하는 코드를 작성해야겠죠.
일일이 인코딩 방식을 봐가면서 하기에는 다소 무리가 있는듯 합니다.
그래서, 편하게 사용할 수 있는 방법이 unix 시스템의 경우,
iconv 라는게 있습니다.
4. iconv 사용법은?
- 명령어
사용법 : iconv -f 원시코드 -t 목적코드 [파일...]
console에서 직접 iconv 명령어를 사용하여 변환할 수 있습니다.
- iconv library 이용
프로그램을 작성하는 경우, 라이브러리를 사용하시면 됩니다.
libiconv.a
* 컴파일시 -liconv 주어야 합니다.
* iconv_open, iconv, iconv_close 등의 함수가 있습니다.
자세한 사항은 iconv man page를 참조하세요
5. iconv를 통해 변화할 수 있는 character set 정보는 어디에?
시스템마다 조금씩 다릅니다.
* iconv man page
* PHP 에서의 변환
기본적으로 서버에서 iconv 함수를 지원한다면 @iconv함수를 이용하시면 됩니다.(iconv함수는 PHP 기본 함수가 아님니다)
하지만 지원하지 않는다면 위에서 소개한 콘솔을 이용하시면됩니다.
@iconv함수를 이용한 방법
euc-kr -> UTF-8 $str = @iconv("UHC","UTF-8",$str); UTF-8 -> euc-kr $str = @iconv("UTF-8","UHC",$str); big5 -> UTF-8 $str = @iconv("big5","UTF-8",$str);
콘솔 iconv를 이용한 방법
function euckr2utf8($str) { $str = ereg_replace("\n","\\n",$str); $str = exec('echo ''.$str.'' |iconv -c -f uhc -t utf-8'); return ereg_replace("\\\\n","\n",$str); } function utf82euckr($str) { $str = ereg_replace("\n","\\n",$str); $str = exec('echo ''.$str.'' |iconv -c -f utf-8 -t uhc'); return ereg_replace("\\\\n","\n",$str); } euc-kr -> UTF-8 $str = euckr2utf8($str); UTF-8 -> euc-kr $str = utf82euckr($str)
* UTF-8 인지 확인하는 함수
function isutf8($str) { $i=0; $len = strlen($str); for ($i=0;$i<$len;$i++) { $sbit = ord(substr($str,$i,1)); if ($sbit < 128) { } else if($sbit > 191 && $sbit < 224) { $i++; } else if($sbit > 223 && $sbit < 240) { $i+=2; } else if($sbit > 239 && $sbit < 248) { $i+=3; } else { return 0; } } return 1; }
ps. 위함수는 KEBIL이 작성하신것입니다.
* 자신의 호스팅 계정이 함수방법, 콘솔방법을 지원하는지 알아보기위한 소스
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>변환 방법 확인</title> </head> <body> 1. iconv() 함수 존재여부 확인<br /> Result: <? $test2 = function_exists(iconv); if($test2 == 1) echo "있음"; else echo "없음"; ?><br /><br /> 2. Consol iconv test<br /> Result: <? $test = exec('echo "112" |iconv -f euc-kr -t utf-8'); if($test=="112") echo "사용가용"; else echo "사용불가"; ?><br /><br /> <? if($test == 112 && $test2 ==1) { echo"방법1과 방법2를 사용할 수 있습니다.<br />방법1을 사용하는 것이 가장 쉽습니다.<br />단, 변환불가능한 문자(UTF-8에는 존재하지만, euc-kr에는 존재하지 않는 문자, 기호 등)가 있을 경우 변환 결과가 나오지 않을 수 있습니다. 그럴 경우에는 방법 2를 사용해 주세요."; } else if($test != 112 && $test2 ==0) { echo"두 방법 모두 사용할 수 없습니다. 방법 3을 사용하세요."; } else if($test != 112 && $test2 ==1) { echo"방법1을 사용할 수 있습니다."; } else if($test == 112 && $test2 ==0) { echo "방법2를 사용할 수 있습니다."; } ?> </body> </html>
|
댓글목록
등록된 댓글이 없습니다.