本人開發環境在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.