说到Linux C下的转码就不得不提到iconv这个函数。
还是用代码说话,我会将注释写的详细些。
#include
#include
//从UTF-8转到GBK,先定义两个宏,万一以后有变动修改下这里即可。
#define ICONVFROM “UTF-8”
#define ICONVTO “GBK”
/*
iconv需要一个iconv_t类型的变量作为转码标识
这里我们申请一个全局静态变量
*/
static iconv_t cnv;
/*
将转码的初始化步骤封装成函数
返回-1表示失败,返回0表示成功
*/
int iconvOpen( )
{
if ( ( cnv = iconv_open( ICONVTO,ICONVFROM ) ) != (iconv_t) -1 ) {
fprintf( stderr, “转码初始化失败” );
return -1;
}
return 0;
}
//将转码的结束工作也封装成函数
void iconvClose()
{
iconv_close( cnv );
}
/*
将转码过程封装成函数
返回-1表示失败,返回0表示成功
*/
int _iconv(char * WordBefore, char * WordAfter)
{
size_t i,j;
int r;
/*
iconv的五个参数的意义分别是:
1、 iconv_open申请的转码标识
2、 转码前的内容
3、 转码前内容的长度,如果这是存放在数组中,那么将数组的长度传过来即可。
4、 转码后内容的存放区
5、 转码内容的长度(注意是“转码内容”而不是“转码后内容存放区”的长度)
其中第5个参数一般不会用到,但还是知道比较好。
*/
if ( ( r = iconv( cnv, &WordBefore,&i, &WordAfter, &j ) ) < 0 ) {
fprintf( stderr, “转码失败\n” );
return -1;
}
return 0;
}