iconv 函数

本文介绍了一个使用C语言实现的字符集转换函数api_iconv。该函数利用iconv库进行不同字符集间的字符串转换,并详细展示了如何正确传递参数以避免错误。此外,还提供了一个将UTF-8字符串转换为GB2312字符串的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

形参不用size_t 会出错


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




#define RET_OK 0
#define RET_ERR -1
#define PRINTF_DEBUG printf 


int api_iconv(const char *in_code, char *in_buf, size_t in_len,const char *out_code, char *out_buf, size_t out_buf_max, size_t *out_len)
{
        int ret;
        iconv_t cd;
        char *p_in, *p_out;


        p_in = in_buf;
        p_out = out_buf;
        *out_len = out_buf_max;
        cd = iconv_open(out_code, in_code);
        if ((iconv_t)(-1)  == cd){
                PRINTF_DEBUG("iconv_open error!. errno %d in %s %s.\n", errno, in_code, out_code);
                return RET_ERR;
        }
        ret = iconv(cd, &in_buf, &in_len, &out_buf, out_len);
        *out_len = out_buf_max - *out_len;
        iconv_close(cd);
        if (0 != ret){
                PRINTF_DEBUG("iconv error!. %d errno %d in %2s out %2s %zu %zu %s %s\n", ret, errno, p_in, p_out, in_len, *out_len, in_code, out_code);
                return RET_ERR;
        }


        PRINTF_DEBUG("in %s, out %s %zu.\n", p_in, p_out, *out_len);


        return RET_OK;
}


int main()

{
int ret = -1;
int len, len2, cc;
char utf8[100] = "abc您好中国";
char buff[102] ={ 0 };


len2 = strlen(utf8);
cc = sizeof(buff);
ret = api_iconv("UTF-8",utf8,len2,"GB2312",buff, cc,&len);
printf("%s %d \n", utf8, len);
printf("%s %d\n", buff, strlen(buff));
return 0;
}




gcc -o t4 in4.c -liconv
[root@localhost test]# ./t4
SRC , DST  11.
abc您好中国 11
abc????й? 11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值