c语言日语字符编码,C语言-字符编码转换:UTF与GB2312

1 #include

2 #include

3 #include

4 #include "iconv.h"

5 #include "eventlist.h"

6

7 static int ChangeCode( const char* pFromCode, const char* pToCode, const char*pInBuf,8 size_t* piInLen, char* pOutBuf, size_t*piOutLen )9 {10 intiRet;11 char **pin = &pInBuf;12 char **pout = &pOutBuf;13 iconv_t hIconv;14

15 //printf("%s: outlen=%d, inlen=%d\n", __FUNCTION__, *piOutLen, *piInLen);16

17 //打开字符集转换

18 hIconv =iconv_open( pToCode, pFromCode );19 if ( -1 == (int)hIconv )20 {21 perror("iconv_open");22 return -1;23 }24 //开始转换

25 printf("%s: 1 outlen=%d\n", __FUNCTION__, *piOutLen);26 iRet =iconv( hIconv, pin, piInLen, pout, piOutLen );27 if ( -1 ==iRet )28 {29 perror("iconv");30 return -1;31 }32 printf("%s: 2 outlen=%d\n", __FUNCTION__, *piOutLen);33

34 //关闭字符集转换

35 iconv_close( hIconv );36

37 **pout = ‘\0‘;38 returniRet;39 }40

41 static int MAIN_UTFToGb2312(char * pcFrom, char * pcTo, intiMaxToLen)42 {43 char * psInBuf =NULL;44 char * psOutBuf =NULL;45 unsigned int iInLen = 0;46 unsigned int iOutLen = 0;47 intiRet;48

49 iInLen = strlen(pcFrom)+1;50 psInBuf = (char *)malloc(iInLen);51 if ( NULL ==psInBuf )52 {53 return 0;54 }55 memset(psInBuf, 0x0, iInLen);56 memcpy(psInBuf, pcFrom, iInLen);57

58 iOutLen =iMaxToLen;59 psOutBuf = (char *)malloc(iOutLen);60 if ( NULL ==psOutBuf )61 {62 free(psInBuf);63 psInBuf =NULL;64 return 0;65 }66 memset(psOutBuf, 0x0, iOutLen);67

68 iRet = ChangeCode( "utf-8", "gb2312", psInBuf, &iInLen, psOutBuf, &iOutLen );69 //iRet = u2g(psInBuf, iInLen, psOutBuf, iOutLen);

70 if ( 0 !=iRet )71 {72 printf("ChangeCode: Error\n");73 //return 0;

74 }75 memcpy(pcTo, psOutBuf, iOutLen);76 printf("%s: iOutLen = %d\n", __FUNCTION__, iOutLen);77

78 free(psInBuf);79 psInBuf =NULL;80 free(psOutBuf);81 psOutBuf =NULL;82

83 returniOutLen;84

85 }86

87 static int MAIN_GB2312ToUTF(char * pcFrom, char * pcTo, intiMaxToLen)88 {89 char * psInBuf =NULL;90 char * psOutBuf =NULL;91 unsigned int iInLen = 0;92 unsigned int iOutLen = 0;93 intiRet;94

95 iInLen = strlen(pcFrom)+1;96 psInBuf = (char *)malloc(iInLen);97 if ( NULL ==psInBuf )98 {99 return 0;100 }101 memset(psInBuf, 0x0, iInLen);102 memcpy(psInBuf, pcFrom, iInLen);103

104 iOutLen =iMaxToLen;105 psOutBuf = (char *)malloc(iOutLen);106 if ( NULL ==psOutBuf )107 {108 free(psInBuf);109 psInBuf =NULL;110 return 0;111 }112 memset(psOutBuf, 0x0, iOutLen);113

114 iRet = ChangeCode( "gb2312", "utf-8", psInBuf, &iInLen, psOutBuf, &iOutLen );115 //iRet = u2g(psInBuf, iInLen, psOutBuf, iOutLen);

116 if ( 0 !=iRet )117 {118 printf("ChangeCode: Error\n");119 //return 0;

120 }121 memcpy(pcTo, psOutBuf, iOutLen);122 printf("%s: iOutLen = %d\n", __FUNCTION__, iOutLen);123

124 free(psInBuf);125 psInBuf =NULL;126 free(psOutBuf);127 psOutBuf =NULL;128

129 returniOutLen;130

131 }132

133 intmain()134 {135 char strUTF[]={136 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,137 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,138 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,139 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,140 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,141 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6, 0xE5, 0xBC, 0x80, 0xE8,0xBD, 0xA6, 0xE4, 0xBA, 0x8B, 0xE4, 0xBB, 0xB6,142 0x00, 0x00, 0x00

143 };144 char chTmpStr[256];145 int len = 0;146

147 memset(chTmpStr, 0x0, 256);148 MAIN_UTF2Gb2312(strUTF, chTmpStr, 256);149 printf("Main: change=%s\n", chTmpStr);150

151 return 0;152 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值