AnsiToUtf8 和 Utf8ToAnsi
2016-02-23 10:12
267 查看
在服务端数据库的处理当中,涉及中文字符的结构体字段,需要转为Utf8后再存储到表项中。
从数据库中取出包含中文字符的字段后,如果需要保存到char *类型的结构体成员中,需要转为Ansi后再保存。
从数据库中取出类型数字的字段后,如果需要保存到int型的结构体成员中,需要调用atoi函数进行处理后再保存。
从数据库中取出包含中文字符的字段后,如果需要保存到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 utf8 30 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 utf8 90 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 }
相关文章推荐
- RequireJS入门(三)
- OpenCV——Perlin Noise
- 数学函数详解
- UITableViewCell等控件字体随系统字体变化的解决方案
- OpenCV——PS滤镜 水波效果
- OpenCV——PS滤镜之 波浪效果 wave
- 选择排序-学习篇(二)
- unity学习Nav Mesh Agent组件
- form 上传图片
- 求两条线段交点zz
- 微信红包的玩法-代金卷-现金红包-立减、折扣红包
- 菜鸟阶段,使用Android开发工具eclipse编辑器中的相关快捷键
- linux经验总结
- Linux笔记(16)——通配符与其他特殊符号
- OpenCV——PS滤镜 漩涡 vertex
- iOS 获取手机的机型
- 如何加快C++代码的编译速度
- VS的快捷键F12改成和ECLIPSE一样用ctrl+点击下载线
- 为什么要用 SpringMVC 的 SessionStatus
- Jenkins+Ant+Jmeter搭建持续集成的接口测试平台(转)