본문 바로가기

Development

[Development]iconv

- iconv?
* HomePage : http://www.gnu.org/software/libiconv/
* 문자 인코딩간 변환을 수행하는 라이브러리

- iconv 예제

#include <iconv.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>

# define BTN_VIDEO_LB "비디오"

int euckr2utf8( char *inbuf, char *outbuf )
{
    size_t inbytesleft;
    size_t outbyteleft;

    char *inbuf_p = inbuf;
    char *outbuf_p = outbuf;

    iconv_t cd = iconv_open( "UTF8", "EUC-KR" );

    if ( cd < 0 )
    {
        perror( "iconv" );
        return 1;
    }

    inbytesleft = strlen( inbuf );
    assert( inbytesleft != 0 );
    printf( "inbytesleft %d \n", inbytesleft );
    outbyteleft = 999;
    iconv( cd, &inbuf_p, &inbytesleft, &outbuf_p, &outbyteleft );
    printf( "outbyteleft %d\n", outbyteleft );
    iconv_close( cd );
    return 0;
}

int utf82euckr( char *inbuf, char *outbuf )
{
    size_t inbytesleft;
    size_t outbyteleft;

    char *inbuf_p = inbuf;
    char *outbuf_p = outbuf;

    iconv_t cd = iconv_open( "EUC-KR", "UTF8" );

    if ( cd < 0 )
    {
        perror( "iconv" );
        return 1;
    }
    inbytesleft = strlen( inbuf );
    assert( inbytesleft != 0 );

    printf( "inbytesleft %d \n", inbytesleft );
    outbyteleft = 999;
    iconv( cd, &inbuf_p, &inbytesleft, &outbuf_p, &outbyteleft );
    printf( "outbyteleft %d\n", outbyteleft );

    iconv_close( cd );
    return 0;
}

int main( int argc, char *argv[] )
{
    char buf[ 100 ];
    char buf2[ 100 ];

    printf( "org %s, len (%d)\n", BTN_VIDEO_LB, strlen( BTN_VIDEO_LB ) );
    euckr2utf8( BTN_VIDEO_LB, buf );
    printf( "orig -> utf8 : %s, len (%d)\n", buf, strlen( buf ) );
    utf82euckr( buf, buf2 );
    printf( "utf8 -> euckr : %s, len (%d)\n", buf2, strlen( buf2 ) );

    return 0;
}