0

在工程中加sqlite3源代码,调用第一个函数sqlite3_open,发现其不支持中文路径。
经过检索发现该函数要求输入的文件名为utf8编码。
//再sqlite3.c中 winFullPathname、sqlite3_win32_mbcs_to_utf8、mbcsToUnicode、unicodeToUtf8与此事相关。
//参考以上4个函数,做的一个编码转换函数
CString CMyApp::MbcsToUtf8(const char *file)
{
    CString str;
    WCHAR   *pwchar=0;
    CHAR    *pchar=0;
    int len=0;
    int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
    len=MultiByteToWideChar(codepage, 0, file, -1, NULL,0);
    pwchar=new WCHAR[len];
    if(pwchar!=0)
    {
        len = MultiByteToWideChar(codepage, 0, file, -1, pwchar, len);
        if( len!=0 )
        {
            len = WideCharToMultiByte(CP_UTF8, 0, pwchar, -1, 0, 0, 0, 0);
            pchar=new CHAR[len];
            if(pchar!=0)
            {
                len = WideCharToMultiByte(CP_UTF8, 0, pwchar, -1, pchar, len,0, 0);
                if(len!=0)                
                {
                    str=pchar;                   
                }
                delete pchar;
            }
            delete pwchar;
        }
    }
    return str;
}
//在调用 sqlite_open 前将文件路径,通过MbcsToUtf8函数将编码转换到utf8即可支持中文路径。

 

http://wangzhenjun113.blog.163.com/blog/static/9669979201062132020279/

关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.