Public/tip & tech

iconv 를 이용한 문자열 변환(utf-8)

quantapia 2009. 5. 12. 17:59

리눅스에서 많은 함수들을 지원하지만 그중에서 iconv의 사용법에 대한 설명이다.

 

iconv는 아래 예에서 든 캐릭터셋 이외에도 훨씬 많은 캐릭터간의 변환이 가능하다

 

#include

size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);

아래 예제는 utf-8에서 euc-kr로 변환하는 소스이다

 

 

#include
#include
#include
#include

int main()
{
        char * sourceP = NULL;
        char * destP = NULL;
        char sourceBuffer[1024];
        char destBuffer[1024];
        int size1 = 0;
        int size2 = 0;
        size_t cc;
        iconv_t * it;

        printf("input : ");
        fgets(sourceBuffer,1024, stdin);

        size1 = strlen(sourceBuffer) - 1 ;
        size2 = size1 * 3;
        it = iconv_open("utf-8", "euc-kr");
        if (it == (iconv_t) -1)
        {
                perror("open");
                exit(1);
        }

        sourceP = sourceBuffer;
        destP = destBuffer;
        cc = iconv(it,&sourceP, &size1, &destP, &size2);
        if (cc == (size_t) -1) {
                perror("iconv");
                exit(1);
        }

        //printf("result(%d)%s\n", destP - destBuffer, destBuffer);
        printf("result  : %s\n",  destBuffer);
        iconv_close(it);

        return 0;