在服务端数据库的处理当中,涉及中文字符的结构体字段,需要转为Utf8后再存储到表项中。
从数据库中取出包含中文字符的字段后,如果需要保存到char *类型的结构体成员中,需要转为Ansi后再保存。
从数据库中取出类型数字的字段后,如果需要保存到int型的结构体成员中,需要调用atoi函数进行处理后再保存。
1 static char *AnsiToUtf8(char *pchAnsi)2 {3 int uSize=0;4 WCHAR *pwText =NULL;5 char *pchUtf8=NULL;6 int nUtf8Len = 0;7 8 if(NULL == pchAnsi)9 {10 return NULL;11 }12 13 do 14 {15 uSize = MultiByteToWideChar(CP_ACP,0,pchAnsi,-1,NULL,0);16 if(uSize <=0)17 {18 break;19 }20 pwText = (wchar_t*)malloc((uSize+1)*sizeof(wchar_t));21 if(!pwText)22 {23 break;24 }25 26 memset((void*)pwText,0,sizeof(wchar_t)*(uSize+1));27 MultiByteToWideChar(CP_ACP,0,pchAnsi,-1,pwText,uSize);28 29 //widechar to utf830 nUtf8Len = WideCharToMultiByte(CP_UTF8, 0, pwText, -1, NULL, 0, NULL, NULL);31 if (0 >= nUtf8Len)32 {33 break;34 }35 36 pchUtf8=(char *)malloc(nUtf8Len+2);37 if(NULL == pchUtf8)38 {39 break;40 }41 memset(pchUtf8,0,nUtf8Len+2);42 43 nUtf8Len = WideCharToMultiByte(CP_UTF8, 0, pwText, -1, pchUtf8, nUtf8Len, NULL, NULL);44 if (0 >= nUtf8Len)45 {46 free(pchUtf8);47 pchUtf8 = NULL;48 break;49 }50 51 52 } while (0);53 54 if(NULL!=pwText)55 {56 free(pwText);57 }58 59 return pchUtf8;60 }61 62 static char *Utf8ToAnsi(char *pchUtf8)63 {64 int uSize=0;65 WCHAR *pwText =NULL;66 char *pchAnsic=NULL;67 int ansicStrLen = 0;68 69 if(NULL == pchUtf8)70 {71 return NULL;72 }73 74 do 75 {76 uSize = MultiByteToWideChar(CP_UTF8,0,pchUtf8,-1,NULL,0);77 if(uSize <=0)78 {79 break;80 }81 pwText = (wchar_t*)malloc((uSize+1)*sizeof(wchar_t));82 if(!pwText)83 {84 break;85 }86 memset((void*)pwText,0,sizeof(wchar_t)*(uSize+1));87 MultiByteToWideChar(CP_UTF8,0,pchUtf8,-1,pwText,uSize);88 89 //widechar to utf890 ansicStrLen = WideCharToMultiByte(CP_ACP, 0, pwText, -1, NULL, 0, NULL, NULL);91 if (0 >= ansicStrLen)92 {93 break;94 }95 96 pchAnsic=(char *)malloc(ansicStrLen+2);97 if(NULL == pchAnsic)98 {99 break;
100 }
101 memset(pchAnsic,0,ansicStrLen+2);
102
103 ansicStrLen = WideCharToMultiByte(CP_ACP, 0, pwText, -1, pchAnsic, ansicStrLen, NULL, NULL);
104 if (0 >= ansicStrLen)
105 {
106 free(pchAnsic);
107 pchAnsic = NULL;
108 break;
109 }
110
111 } while (0);
112
113 if(NULL != pwText)
114 {
115 free(pwText);
116 }
117
118 return pchAnsic;
119
120 }