c++中sqlite中文路径创建数据库失败的问题

   sqlite3里面使用的是utf-8的编码,所以在创建数据库的时候若果路径是纯英文字母和数字的话,那么多ansii和utf-8编码是一样的,这个时候sqlite3_open函数的调用完全没问题。但是如果是中文的话asnsii直接转化为Utf-8就会出错, 找不到路径,从而创建或者打开数据库失败。解决的方法如下:

//sdk中可以直接从UNICODE转为utf-8,不能直接从ansii转为utf-8
//所以 Ansii要转为Utf-8, 需要先转为UNICODE 再转为utf-8
void UnicodeToUtf8(char** dest , const WCHAR* src)
 {
//     ASSERT(dest!= NULL || src != NULL);
     int len = -1;
     len = WideCharToMultiByte(CP_UTF8, 0, src, -1, 0, 0, 0, 0)+1;
     *dest = new char[len+1];
     ::WideCharToMultiByte(CP_UTF8, 0, src, -1,*dest, len, 0, 0);
 }

 void AnsiToUtf8(char** dest, const char* src)
 {
    // ASSERT(dest!= NULL || src != NULL);
     WCHAR* pwszStr = NULL;
     C2W(&pwszStr, src);
     UnicodeToUtf8(dest, pwszStr);
     SAFE_ARRYDELETE(pwszStr);
 }

//创建\打开数据库
       // szCreateTable="c:\\program files\\溜溜\\test.db"
        char* pszCreateSql = NULL;
     //没有这句创建或者打开失败
    AnsiToUtf8(&pszCreateSql, szCreateTable);

    ///////////

    if (  sqlite3_open(/*szCreateTable*/pszCreateSql, ppdb) != SQLITE_OK)
    {
        //打开或者创建数据库失败
        sqlite3_close(*ppdb);
        *ppdb = null;
        return DB_FAILED;
    }
    else{}
    

c++中sqlite中文路径创建数据库失败的问题

时间: 2024-08-28 03:13:23

c++中sqlite中文路径创建数据库失败的问题的相关文章

SQLite创建数据库失败

1.现象:.创建不出来数据库, 解决:测试用的项目包明以db结尾了,重新创建项目改成dbtest就没事了. 2.现象;创建出来数据库,但是数据库中没有表项 解决: db.execSQL("create table " + TABLE_NEWS_NAME + " ( " + TABLE_NEWS_ID + " integer primary key autoincrement, " + TABLE_NEWS_TITLE + " varch

创建数据库失败((Microsoft.SqlServer.Smo)) 执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo

机房收费系统完成了,但是我是在笔记本上敲得,没有实现异地发布,结局只能是被PASS掉了~回来重新导出自己的数据库到台式机上,由于我笔记本装的SQL和台式机版本是不一样的,所以遇到一些问题,具体解决方法请参考博客:http://blog.csdn.net/mascf/article/details/38644759 导出脚本成功但是新建数据库又出现问题,新建过程中出现如下问题: (但是忘记截图,关键词如下) 创建数据库失败((Microsoft.SqlServer.Smo)) 执行 Transac

创建数据库失败((Microsoft.SqlServer.Smo))执行Transact-SQL语句或批处理时发生了异常。

房收费系统完成了,但是我是在笔记本上敲得,没有实现异地发布,结局只能是被PASS掉了~回来重新导出自己的数据库到台式机上,由于我笔记本装的SQL和台式机版本是不一样的,所以遇到一些问题,具体解决方法请参考博客:http://blog.csdn.net/mascf/article/details/38644759 导出脚本成功但是新建数据库又出现问题,新建过程中出现如下问题: (但是忘记截图,关键词如下) 创建数据库失败((Microsoft.SqlServer.Smo)) 执行 Transact

在Python中处理中文路径

最近在Windows下使用Python进行Swift API的开发,其中对象(相当于文件)上传和下载会涉及到中文路径,可是纠结了好长时间,总是提示路径不存在,后来经过多方查找资料和咨询,终于找到问题所在.对文件路径需要使用Unicode编码: local_path = unicode(local_path, 'utf8) file = open(local_path, 'rb') 文章出自:http://blog.csdn.net/twlkyao/article/details/26715443

python----ftplib中遇到中文路径错误问题

python----ftplib中遇到中文路径错误问题 笔者在写一个简易的ftp程序的时候. 遇到返回提示说找不到FTP上的路径. 但是路径肯定时没错的. 而且当路径变成普通的不含中文的路径的时候,就是正常的. 下面是笔者的代码 #!/usr/bin/python3 #-*- coding: utf-8 -*- from ftplib import FTP import sys,time,os,hashlib #定义时间 sys_time = time.time() sys_time_array

python中由于中文路径引起的os.path.isfile(imgpath) == False问题

昨天在用python脚本处理文件的时候,遇到了题述问题,明明文件时存在的,但是在用os.path.isfile(imgpath) == False进行判断的时候总是成立,在一开始以为是正反斜杠windows与linux不同导致的,后来发现时因为中文路径造成的. 在网上查阅了解决办法如下: imgpath = unicode(imgpath, "utf8") 利用上述语句将imgpath的编码进行转换,然后再进行判断以及后续的图片读取(使用cv2模块)就都没有问题了.

MySQL创建数据库失败

如果使用root账号登录到数据库create database时提错错误: MySQL: 1006 - Can't create database '***' (errno: 13) 或 MySQL: 1006 - Can't create database '***' (errno: 28) ,一般是mysql用户没有目录权限的问题. 先用Linux指令 :   ls -ld 查看data目录权限, data是存放数据文件的文件夹 ls -ld /alidata/server/mysql-5.

Android中SQLite数据库的简单使用

File file = new File("hah.txt"); //只是创建了一个对象file, file指向了hah.txt这个文件,hah.txt这个文件可能存在,也可能不存在.如果文件不存在,则不会被创建. 必须要有文件输出流对文件进行了写的操作,文件才会被创建. 游标:在访问数据库中表结构时,想访问表中的某一行的时候,数据库内部有一个快速的定位方式,这个定位方式是通过索引来实现的.游标相当于数组的指针,通过游标的上下移动来查找数据. 在Android中使用SQLite数据库,

001_创建数据库和表

--数据库的创建不能再事物中展开,因为创建数据库本身就是一个事物,平常应该注意避免嵌套事务 --创建数据库TEST_BAK IF EXISTS ( SELECT  1 FROM    sys.sysdatabases WHERE   name = 'TEST_BAK' ) PRINT N'数据库 ''TEST_BAK'' 已存在!' ELSE BEGIN CREATE DATABASE TEST_BAK ON ( NAME='TEST_BAK_mdf',--数据文件逻辑名 FILENAME='E