16,472
社区成员
发帖
与我相关
我的任务
分享
char currentpath[100];
CTranslateUTF8 toutf8;
CString cspath;
GetCurrentDirectory(100,currentpath);
cspath=_T(currentpath);
cspath+=_T("\\MsgData.db");
memset(currentpath,0,100);
char path[100];
int size=100;
if(!toutf8.UnicodeToUtf8(path,size,(LPCWSTR)(LPCTSTR)cspath)){
MessageBox("转换出错!");
}
if(sqlite3_open(currentpath,&m_codedb)!=SQLITE_OK){
MessageBox("不能打开数据库。。");
}
CString sqlcheck="select bcheck from code";
char **bcheckresult;
char *errmsg;
int nrow,ncolumn;
if(sqlite3_get_table(m_codedb,sqlcheck,&bcheckresult,&nrow,&ncolumn,&errmsg)!=SQLITE_OK){
MessageBox("不能执行SQLcheck");
}
#pragma once
class CTranslateUTF8
{
public:
CTranslateUTF8(void);
~CTranslateUTF8(void);
static BOOL AsciiToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc);
static BOOL UnicodeToAscii(LPSTR strDes,int &iDesSize,LPCWSTR strSrc);
static BOOL UnicodeToUtf8(LPSTR strDes,int &iDesSize,LPCWSTR strSrc);
static BOOL Utf8ToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc);
static BOOL AsciiToUtf8(LPSTR strDes,int &iDesSize,LPCSTR strSrc);
static BOOL Utf8ToAscii(LPSTR strDes,int &iDesSize,LPCSTR strSrc);
};
#include "StdAfx.h"
#include "TranslateUTF8.h"
CTranslateUTF8::CTranslateUTF8(void)
{
}
CTranslateUTF8::~CTranslateUTF8(void)
{
}
BOOL CTranslateUTF8::UnicodeToAscii(LPSTR strDes,int &iDesSize,LPCWSTR strSrc)
{
char* pElementText=NULL;
int iTextLen=0;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_ACP,
0,
strSrc,
-1,
NULL,
0,
NULL,
NULL );
if(iDesSize<iTextLen+2)
{
iDesSize=iTextLen+2;
return FALSE;
}
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_ACP,
0,
strSrc,
-1,
pElementText,
iTextLen,
NULL,
NULL );
memcpy(strDes,pElementText,iTextLen);
delete[] pElementText;
return TRUE;
}
BOOL CTranslateUTF8::AsciiToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc)
{
//int len = 0;
//len = strlen(strSrc);
int unicodeLen = ::MultiByteToWideChar( CP_ACP,
0,
strSrc,
-1,
NULL,
0 );
if(iDesSize<unicodeLen+2)
{
iDesSize=unicodeLen+2;
return FALSE;
}
wchar_t * pUnicode=NULL;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar( CP_ACP,
0,
strSrc,
-1,
(LPWSTR)pUnicode,
unicodeLen );
memcpy(strDes,pUnicode,unicodeLen*2);
delete [] pUnicode;
return TRUE;
}
BOOL CTranslateUTF8::UnicodeToUtf8(LPSTR strDes,int &iDesSize,LPCWSTR strSrc)
{
char* pElementText=NULL;
int iTextLen=0;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_UTF8,
0,
strSrc,
-1,
NULL,
0,
NULL,
NULL );
if(iDesSize<iTextLen+2)
{
iDesSize=iTextLen+2;
return FALSE;
}
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
::WideCharToMultiByte( CP_UTF8,
0,
strSrc,
-1,
pElementText,
iTextLen,
NULL,
NULL );
memcpy(strDes,pElementText,iTextLen);
delete[] pElementText;
return TRUE;
}
BOOL CTranslateUTF8::Utf8ToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc)
{
//int len = 0;
//len = strlen(strSrc);
int unicodeLen = ::MultiByteToWideChar( CP_UTF8,
0,
strSrc,
-1,
NULL,
0 );
if(iDesSize<unicodeLen+2)
{
iDesSize=unicodeLen+2;
}
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar( CP_UTF8,
0,
strSrc,
-1,
(LPWSTR)pUnicode,
unicodeLen );
memcpy(strDes,pUnicode,unicodeLen*2);
delete [] pUnicode;
return TRUE;
}
BOOL CTranslateUTF8::AsciiToUtf8(LPSTR strDes,int &iDesSize,LPCSTR strSrc)
{
WCHAR *buf=new WCHAR[iDesSize];
memset(buf,0,iDesSize*2);
int len=iDesSize;
if(AsciiToUnicode(buf,len,strSrc))
{
if(UnicodeToUtf8(strDes,iDesSize,buf))
{
delete [] buf;
return TRUE;
}
}
delete [] buf;
return FALSE;
}
BOOL CTranslateUTF8::Utf8ToAscii(LPSTR strDes,int &iDesSize,LPCSTR strSrc)
{
WCHAR *buf=new WCHAR[iDesSize];
memset(buf,0,iDesSize*2);
int len=iDesSize;
if(Utf8ToUnicode(buf,len,strSrc))
{
if(UnicodeToAscii(strDes,iDesSize,buf))
{
delete [] buf;
return TRUE;
}
}
delete [] buf;
return FALSE;
}