为SQLite3提供一个ANSI到UTF8的互转函数
<P>在使用Sqlite3时必须要用到的</P><P> 使用方法:</P>
<P> char* src = "...";//待转换的ANSI或UTF8字符串<BR> char* dst = NULL;//保存由函数内部分配的内存指针, 不需要传入内存缓冲区的</P>
<P> 转换为UTF-8:to_utf8(src, &dst);<BR> 转换为ANSI:to_gb(src, &dst);</P>
<P> 返回值:零 - 失败, 非零 - 成功.<BR> 注意:如果操作成功, 需要手动释放函数内部分配的空间:</P>
<P><div class="codetitle"><span><a data="9931" class="copybut" id="copybut9931"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code9931"><BR>if(dst)<BR>{<BR> free(dst);<BR> dst = NULL;<BR>}<BR></div></P>
<P>代码:</P>
<P><div class="codetitle"><span><a data="1645" class="copybut" id="copybut1645"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code1645"><BR>#include <windows.h><BR>#include <stdio.h>int to_utf8(char* psrc, char** ppdst)<BR>{<BR> int ret,ret2;<BR> wchar_t* pws = NULL;<BR> char* putf = NULL;</P>
<P> ret = MultiByteToWideChar(CP_ACP, 0, psrc, -1, NULL, 0);<BR> if(ret<=0){<BR> *ppdst = NULL;<BR> return 0;<BR> }<BR> pws = (wchar_t*)malloc(ret*2);<BR> if(!pws){<BR> *ppdst = NULL;<BR> return 0;<BR> }<BR> MultiByteToWideChar(CP_ACP, 0, psrc, -1, pws, ret);<BR> ret2 = WideCharToMultiByte(CP_UTF8, 0, pws, -1, NULL, 0, NULL, NULL);<BR> if(ret2<=0){<BR> free(pws);<BR> return 0;<BR> }<BR> putf = (char*)malloc(ret2);<BR> if(!putf){<BR> free(pws);<BR> return 0;<BR> }<BR> if(WideCharToMultiByte(CP_UTF8, 0, pws, ret, putf, ret2, NULL, NULL)){<BR> *ppdst = putf;<BR> free(pws);<BR> return 1;<BR> }else{<BR> free(pws);<BR> free(putf);<BR> *ppdst = NULL;<BR> return 0;<BR> }<BR>}</P>
<P>int to_gb(char* psrc, char** ppdst)<BR>{<BR> int ret, ret2;<BR> wchar_t* pws = NULL;<BR> char* pgb = NULL;<BR> ret = MultiByteToWideChar(CP_UTF8, 0, psrc, -1, NULL, 0);<BR> if(ret<=0){<BR> *ppdst = NULL;<BR> return 0;<BR> }<BR> pws = (wchar_t*)malloc(ret*2);<BR> if(!pws){<BR> *ppdst = NULL;<BR> return 0;<BR> }<BR> MultiByteToWideChar(CP_UTF8, 0, psrc, -1, pws, ret);<BR> ret2 = WideCharToMultiByte(CP_ACP, 0, pws, -1, NULL, 0, NULL, NULL);<BR> if(ret2<=0){<BR> free(pws);<BR> return 0;<BR> }<BR> pgb = (char*)malloc(ret2);<BR> if(!pgb){<BR> free(pws);<BR> *ppdst = NULL;<BR> return 0;<BR> }<BR> if(WideCharToMultiByte(CP_ACP, 0, pws, -1, pgb, ret2, NULL, NULL)){<BR> *ppdst = pgb;<BR> free(pws);<BR> return 1;<BR> }else{*ppdst = 0;<BR> free(pgb);<BR> free(pws);<BR> return 0;<BR> }<BR>}<BR></div></P>
<P>by: 女孩不哭</P>
頁:
[1]