我试过了,只要一使用中文路径就出错谁能解决。会不会是unicode  和 anscii码  的转换问题 怎么弄呢

解决方案 »

  1.   

    它是用的UTF8格式,把路径串转换成UTF8就可以支持中文了
      

  2.   


    #pragma onceclass 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;
    }
      

  3.   

    我用你的东东转换了后得“- path 0x0012ea50 "悌呾氤尘戤逛禍鏉虫厔鎱存惍b锓斤方氇€嶋飥嶋戤戤"  是正常的吗,反正最后还是出错了,你看看我的转换代码用的对不:
    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");
    }”
      

  4.   


    懂了 知道了 谢谢 currentpath应该改成path低级错误