sqlite不能用中文路径怎么办

hellengoodd 2012-03-09 10:07:07
我试过了,只要一使用中文路径就出错。。。谁能解决。会不会是unicode 和 anscii码 的转换问题 怎么弄呢
...全文
179 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellengoodd 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaohuh421 的回复:]

C/C++ code

#pragma once

class CTranslateUTF8
{
public:
CTranslateUTF8(void);
~CTranslateUTF8(void);
static BOOL AsciiToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc);
stati……
[/Quote]

懂了 知道了 谢谢 currentpath应该改成path。。。低级错误。。。
hellengoodd 2012-03-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaohuh421 的回复:]

C/C++ code

#pragma once

class CTranslateUTF8
{
public:
CTranslateUTF8(void);
~CTranslateUTF8(void);
static BOOL AsciiToUnicode(LPWSTR strDes,int &iDesSize,LPCSTR strSrc);
stati……
[/Quote]
我用你的东东转换了后得“- 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");
}

xiaohuh421 2012-03-10
  • 打赏
  • 举报
回复

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


hellengoodd 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaohuh421 的回复:]

它是用的UTF8格式,把路径串转换成UTF8就可以支持中文了
[/Quote]
兄弟 你也不顺带一个转换方法
xiaohuh421 2012-03-09
  • 打赏
  • 举报
回复
它是用的UTF8格式,把路径串转换成UTF8就可以支持中文了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧