一、简介
由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码。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
运行
原文:http://www.cnblogs.com/274914765qq/p/4589825.html