在服务端数据库的处理当中,涉及中文字符的结构体字段,需要转为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 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 }

  

AnsiToUtf8 和 Utf8ToAnsi的更多相关文章

  1. BCB:UTF8Encode、AnsiToUtf8

    UTF8Encode: Call Utf8Encode to convert a Unicode string to UTF-8. WS is the Unicode string to conver ...

  2. Lazarus 字符集转换 Utf8ToAnsi,UTF8ToWinCP,UTF8ToSys,UTF8ToConsole

    由于Lazarus从1.2版开始默认字符集就是UTF8,如果要转到系统正常显示或文本保存,就必须对字符集进行转换.Lazarus提供了很多函数.如题. 那么这里面有什么关系呢? UTF8ToSys 需 ...

  3. Delphi 解决Utf8ToAnsi和Utf8DeCode转换编码为空的问题

    //delphi DecodeUtf8Str解决系统自带UTF8解码缺陷 function DecodeUtf8Str(const S: UTF8String): WideString; var le ...

  4. mysql中文坑爹的东西

    1.首先pb需要utf8格式,所以由ansi转换成utf8格式才能传输 2.在接收端,需要将utf8转换成ansi才能用 3.在插入数据库之前需要将sql从ansi转换成utf8格式 4.数据库设置字 ...

  5. phprpc 使用实例(例实没错却不能执行)函数冲突gzdecode

    PHPRPC 是一个轻型的.安全的.跨网际的.跨语言的.跨平台的.跨环境的.跨域的.支持复杂对象传输的.支持引用参数传递的.支持内容输出重定向的.支持分级错误处理的.支持会话的.面向服务的高性能远程过 ...

  6. delphi的UTF8相关函数

    delphi的UTF8相关函数 AnsiToUtf8 function Converts a string encoded in Ansi to UTF-8. PUCS4Chars function ...

  7. Lazarus解决含中文文件名或路径的使用问题

      其实用lazarus很久(也不算久啦..),目前打算做完手头的最后一个小程序然后就转向c#窗体程序..之前用lazarus的时候出了很多问题,资料也不是很好找,所以这回把比较容易说的记下来省得忘掉 ...

  8. Delphi读写UTF-8、Unicode格式文本文件

    // UTF-8文件写入函数procedure SaveUTFFile(const FileName: string; S: string; WriteHeader: Boolean = True); ...

  9. phprpc 使用实例(同时有Java、Android和Delphi客户端的例子)

    PHPRPC 是一个轻型的.安全的.跨网际的.跨语言的.跨平台的.跨环境的.跨域的.支持复杂对象传输的.支持引用参数传递的.支持内容输出重定向的.支持分级错误处理的.支持会话的.面向服务的高性能远程过 ...

随机推荐

  1. StringBuffer类和String类(原文地址 : http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html)

    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...

  2. 限制IP远程访问

    方法一:通过hosts.allow和hosts.deny文件进行ip限制 在/etc/目录下,同时存在hosts.allow和hosts.deny文件 如果我们希望某些ip不能访问,那么我们可以打开h ...

  3. 1009 数字1的数量 数位dp

    1级算法题就这样了,前途渺茫啊... 更新一下博客,我刚刚想套用数位dp的模板,发现用那个模板也是可以做到,而且比第二种方法简单很多 第一种方法:我现在用dp[pos][now]来表示第pos位数字为 ...

  4. tensorflow(深度学习框架)详细讲解及实战

    还未完全写完,本人会一直持续更新!~ 各大深度学习框架总结和比较 各个开源框架在GitHub上的数据统计,如下表: 主流深度学习框架在各个维度的评分,如下表: Caffe可能是第一个主流的工业级深度学 ...

  5. PAT1021(dfs 连通分量)

    A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...

  6. 微信小程序开发——点击按钮获取用户授权没反应或反应很慢的解决方法

    异常描述: 点击按钮获取用户手机号码,有的时候会出现点击无反应或很久之后才弹出用户授权获取手机号码的弹窗,这种情况下,也会出现点击穿透的问题(详见:微信小程序开发——连续快速点击按钮调用小程序api返 ...

  7. [剑指Offer]50-第一个只出现一次的字符

    题目链接 https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&tqId=11187&t ...

  8. f5时间设置

    方法一:NTP(推荐) 注:修改ntp server后大约需要10分钟左右才能同步成功. 查看ntp状态: 方法二:手动修改

  9. gridview 显示数据库中的超链接

    gridview默认情况下,数据库中存储的超链接,是不会显示的.它会直接把超链接字符显示出来. 例如:选定数据源后,gridview自动生成的列是这样的: <asp:BoundField Dat ...

  10. JQuery UI之Autocomplete(4)多值输入、远程缓存与组合框

    1.多值输入 首先加入相关的css和js文件,以及对应的HTML代码如下: <link href="../css/jquery-ui.css" rel="style ...