C언어

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

고요한하늘... 2006. 4. 4. 14:05

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

 

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

 

#include

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

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

 

 

#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;

 

ps.
함수에서는

iconv_t iconv_open(const char *tocode, const char *fromcode);
이렇게 쓰지만 iconv 프로그램에서는

iconv -f encoding -t encoding inputfile

이다. FROM과 TO 위치가 달라 헷갈릴수 있다.

'C언어' 카테고리의 다른 글

복잡한 함수포인터 읽기(고급)  (0) 2006.05.08
복잡한 함수포인터 (고급)  (0) 2006.05.05
global(전역변수) & static(정적변수) variable  (0) 2006.03.04
가변인자  (0) 2006.03.04
이차원(2차원) 배열  (0) 2006.03.04