本人开发环境在linux 32位机器上。
首先是一个字符集转换的列子
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <iconv.h>
#include <stdlib.h>
int main(){
char *inbuf="不能发送相同的楼盘";
char *outbuf = malloc(100);
char buf[100] ;
int ret ;
iconv_t cd; //iconv型(其实就是个整型变量)
char *pin=inbuf; //从*inbuf开始读取,最多读取*inbufleft字节-这句将形参的值传给实参
char *pout=outbuf; //转化后从*outbuf开始写入,最多*outbufleft字节--这句将形参的值传给实参
int lenin = strlen(inbuf);
printf("lenin%d\n",lenin);
int lenout = 99;
cd=iconv_open("utf-8","gbk"); //gb18030在嵌入式linux系统上是否被支持有待验证,保险期间可换为"gbk" or "gb2312"
if( cd == 0 )
{
printf("iconv_open() error!\n");
exit -1;
}
memset(outbuf,'\0',100); //这里清零是否会影响到其他线程在outbuf的数据呢?
ret = iconv(cd,&pin,(size_t *)&lenin,&pout,(size_t *)&lenout) ;
if( ret == -1) //转换
{
printf("iconv() error!\n");
exit -1;
}
printf("%s,%s\n",inbuf,outbuf);
iconv_close(cd);
return 0 ;
}
分别对以上函数的介绍
1. iconv_open –申请一个字符集转换的描述符。
iconv_t iconv_open (const char* tocode, const char* fromcode);
支持一下编码:asicc,ISO8859-x,gbk,utf8 ,EUC-CN ,ARMSCII-8 ,等等
返回值
iconv_open函数返回一个新申请的转换描述符。出错时,将修改errno并返回(iconv_t)(-1)。
2.size_t iconv( iconv_t cd,cons
2.