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

    参考 https://blog.csdn.net/tangxiujiang/article/details/78073792 1.使用取余运算符(%) + 判断对象是否是数字来判断: 注意:空字符串. ...

  2. NDK环境搭建方法2

    1.新建项目NDKDemo3 2.新建com.example.shixm.ndkdemo3.MyNdk.java 3.右键main文件夹,New->Folder->JNI Folder 4 ...

  3. C/C++中#pragma once的使用

    在C/C++中,为了避免同一个文件被include多次,有两种方式:一种是#ifndef方式,一种是#pragma once方式(在头文件的最开始加入). #ifndef SOME_UNIQUE_NA ...

  4. 调用高德地图API(热力图)详解

    具体脚本语言如下: <!doctype html> <html> <head> <meta charset="utf-8"> < ...

  5. CSS3实现10种Loading效果(转)

    CSS3实现10种Loading效果  原文地址:http://www.cnblogs.com/jr1993/p/4622039.html 昨晚用CSS3实现了几种常见的Loading效果,虽然很简单 ...

  6. python3与python2的区别(目前遇到的)

    1.进击的print,变成一个函数,print() 2.urllib大一统,呵呵 3.python3默认绝对路径导入

  7. C++ 中的RTTI机制详解

    前言 RTTI是”Runtime Type Information”的缩写,意思是运行时类型信息,它提供了运行时确定对象类型的方法.RTTI并不是什么新的东西,很早就有了这个技术,但是,在实际应用中使 ...

  8. Django的Modelforms的介绍

    from django.forms import ModelForm class Test(ModelForm): # 把那张表转化成form组件 class Meta: # 这个意思即是把Artic ...

  9. Windows系统制作Ubuntu启动U盘(命令行)

    背景 现今Ubuntu系统的使用越来越多,考虑到日常办公还是用Windows系统,但开发的需求常常要有Linux系统.因此将Linux系统安装到U盘不失为一种好的选择.在Windows系统上制作Ubu ...

  10. OC 开发规范指南 - 个人见解写的很好

    纽约时报 移动团队 Objective-C 规范指南 这份规范指南概括了纽约时报 iOS 团队的代码约定. 介绍 关于这个编程语言的所有规范,如果这里没有写到,那就在苹果的文档里: • Objecti ...