码迷,mamicode.com
首页 > 编程语言 > 详细

C语言字符编码处理

时间:2015-06-19 23:02:21      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

一、简介

由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码。libiconv库为需要做转换的应用提供了一个iconv()的函数,以实现一个字符编码到另一个字符编码的转换。

 

二、安装

 

三、API

iconv函数族有三个函数,原型如下:

iconv_t iconv_open(const char *tocode, const char *fromcode);

此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。

 

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

此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。

 

int iconv_close(iconv_t cd);

此函数用于关闭转换句柄,释放资源。

 

四、实例

参考:

 

example1.c

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

int ChangeCode( const char* pFromCode,
        const char* pToCode,
        const char* pInBuf,
        size_t* iInLen,
        char* pOutBuf,
        size_t* iOutLen );

int main( int argc, char* argv[] )
{
    char sInBuf[100];
    char sOutBuf[100];
    size_t iInLen = 0;
    size_t iOutLen = 100;
    int iRet;
    strcpy( sInBuf, "测试 Test Source" );
    puts(sInBuf);

    memset( sOutBuf, 0x00, 100 );
    iInLen = strlen( sInBuf );
    iRet = ChangeCode( "GBK", "UTF-16", sInBuf, &iInLen, sOutBuf, &iOutLen );
    puts(sOutBuf);
    iRet = ChangeCode( "UTF-16", "GBK", sOutBuf, &iOutLen , sOutBuf, &iOutLen );
    puts(sOutBuf);
    return 0;
}

int ChangeCode( const char* pFromCode,
        const char* pToCode,
        const char* pInBuf,
        size_t* iInLen,
        char* pOutBuf,
        size_t* iOutLen )
{
    int iRet;
    //打开字符集转换
    iconv_t hIconv = iconv_open( pToCode, pFromCode );
    if ( -1 == (int)hIconv )
    {
        return -1;//打开失败,可能不支持的字符集
    }
    //开始转换
    iRet = iconv( hIconv, (const char**)(&pInBuf), iInLen, (char**)(&pOutBuf), iOutLen );
    //关闭字符集转换
    iconv_close( hIconv );
    return iRet;
}

编译

gcc -g -o example1 example1.c  -liconv

运行

技术分享

C语言字符编码处理

标签:

原文地址:http://www.cnblogs.com/274914765qq/p/4589825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!