2012년 8월 9일 목요일

UTF8 핸들링

1. UTF8이란? 

유니코드 는 전세계 대부분의 주요 언어의 문자 집합을 하나로 모아 서로 충돌하지 않게 같은 코드 공간 속에 배열해 놓은 것이지만, 문자를 표현하기 위해 최소 16 비트를 요구하기 때문에 현재 전세계적으로 널리 쓰이고 있는 8 비트 기반의 ASCII/ISO-8859 인코딩과는 잘 맞지 않는다. 따라서 이 두가지 방식이 공존할 수 있게 고안한 인코딩 방식이 UTF-8 이다.

2. 참고링크 

3. UTF8 변환 

UTF8 코드는 유니코드와 ASCII 코드의 중간 단계이기 때문에 다른 코드로 변환하기 위해서는 유니코드로 변환해야 한다. UNIX/LINUX 계열에서는 libiconv 라이브러리를 사용하여 변환할 수 있으며, Windows 에서는 WinAPI 중 MultiByteToWideChar()WideCharToMultiByte() 함수를 이용하여 변환한다.

3.1. UTF8 에서 CP949 로 변환 

UTF8 에서 CP949 ( MS Windows 에서 한글 코드페이지 ) 로 변환하기 위해서 다음과 같은 과정을 거친다.
  • UTF8 Code --> Unicode --> CP949 code
대략적인 코드는 다음과 같다.
  •    1 char szText[BUFFER_MAX];
       2 wchar_t wszBuffer[BUFFER_MAX];
       3 
       4 // UTF8 Code --> Unicode
       5 MultiByteToWideChar( CP_UTF8, 0, szText,    -1, wszBuffer, BUFFER_MAX );
       6 // Unicode --> CP949 code
       7 WideCharToMultiByte( CP_ACP,  0, wszBuffer, -1, szText,    BUFFER_MAX, NULL, NULL );
    

3.2. CP949 에서 UTF8 로 변환 

UTF8 에서 CP949 로 변환하는 과정의 반대로 처리한다.
  • CP949 code --> Unicode --> UTF8 Code
대략적인 코드는 다음과 같다.
  •    1 char szText[BUFFER_MAX];
       2 wchar_t wszBuffer[BUFFER_MAX];
       3 
       4 // CP949 Code --> Unicode
       5 MultiByteToWideChar( CP_ACP,  0, szText,    -1, wszBuffer, BUFFER_MAX );
       6 // Unicode --> UTF8 code
       7 WideCharToMultiByte( CP_UTF8, 0, wszBuffer, -1, szText,    BUFFER_MAX, NULL, NULL );
    
 
출처 : http://www.viper.pe.kr/cgi-bin/moin.cgi/UTF8_%EB%B3%80%ED%99%98

댓글 없음: