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

    XSS:攻击者发现XSS漏洞 => 构造代码 => 发送给受害者 => 攻击者获取受害者的cookie => 完成攻击 CSRF:攻击者发现CSRF漏洞 => 构造代码 ...

  2. metasploit framework(五):meterpreter基本命令和python扩展

    基于内存的DLL注入式payload 注入合法的系统进程并建立stager 基于stager上传和预加载DLL进行扩展模块的注入(客户端API) 基于stager建立的socket连接建立加密的TLS ...

  3. GreenDao3.0简单使用(转)

    关于GreenDao greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案. 关于greenDAO的概念可以看官网greenDAO greenDAO 优势 1.一个精简的 ...

  4. 关于CDh5.13.1 HDFS启用HA(High Availability)注意事情--(JournalNode 只有一个编辑路径)

    原因为:主机名不能为域名.更换成hadoop64 这种解决.

  5. 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]

    深度优先搜索算法(Depth First Search),是搜索算法的一种.是沿着树的深度遍历树的节点,尽可能深的搜索树的分支. 当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点 ...

  6. 牛客练习赛15A-吉姆的运算式(Python正则表达式瞎搞)

    传送门 题意:出现的数字,取最后一个数字即可. Python正则表达式提取数字 代码: import re str = input() a = re.findall(r'\-*\d+(?:\.\d+) ...

  7. PTA 7-7 六度空间(广搜)

    “六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论.这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够 ...

  8. selenium验证码和错误截图

    验证码的识别: 1,破解验证码 OCR识别(一般使用tesseract-ocr) 人工智能(AI机器学习 TensorFlow,成本大) 2,绕过验证码 1, 让开发人员临时关闭验证码 2,提供万能验 ...

  9. ios NSUserDefaults存储数据(偏好设置)

    ios NSUserDefaults存储数据(偏好设置) 1.NSUserDefaults用于存储数据量小的数据,主要是用户配置,但也可以支持存储一些小数据包括:NSString, NSNumber, ...

  10. centos7下Redis3的安装与使用

    redis是一个开源的,使用C语言编写的,支持网络交互的,可基于内存也可持久化的Key-Value数据库. 一.安装redis 下载redis源码 > wget http://download. ...