SQLite 对中文路径的支持(用到了StringToWideChar和Utf8Encode在D7的System单元中自带)

最近用SQLITE作为数据库,发现,如果直接传递带中文路径或文件名的数据库,会导致无法打开数据库的情况.
看了一下SQLITE的源码,才发现,原来SQLITE中是用UTF8编码进行文件打开操作的.

所以,在传递文件名的时候,需要先进行编码.在DELPHI中,用以下的函数就可以.

function TranslateDBFile(Str: string): string;
var
  tmp: UTF8String;
  l: Integer;
  l_WideString: PWideChar;
  l_Length: Integer;
begin
  if IsEnglishString(Str) then
    Result := Str
  else
  begin
    l_Length := Length(Str) * 2;
    GetMem(l_WideString, l_Length);

StringToWideChar(Str, l_WideString, l_Length);

Result := Utf8Encode(Str);
    GetMem(l_WideString, 0);

end;
end;

//其中的StringToWideChar和Utf8Encode在D7的System单元中自带.简单,方便.

http://www.cnblogs.com/qiubole/archive/2007/11/07/951807.html

时间: 2024-10-13 23:47:35

SQLite 对中文路径的支持(用到了StringToWideChar和Utf8Encode在D7的System单元中自带)的相关文章

C++ sqlite数据库中文路径编码函数

char* UnicodeToUtf8(const wchar_t* unicode) { int len; len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL); char *szUtf8 = (char*)malloc(len + 1); memset(szUtf8, 0, len + 1); WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, le

Mint Linux自定义快捷键不支持中文路径的问题的解决

/*********************************************************************  * Author  : Samson  * Date    : 04/28/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

director.js 支持中文路径

1.director.js 支持中文路径 390行 return mod === str ? "([._a-zA-Z0-9-%()]+)" : mod; 修改正则 return mod === str ? "([._a-zA-Z0-9-%()]+|[\u4E00-\u9FFF]+)" : mod; 2.ie8bug (1)不支持isArray方法文件头加上 if (!Array.isArray) { Array.isArray = function(arg) { r

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 U

C++支持中文路径

默认情况下C++编码时,存在中文路径下文件打开成功,解析数据失败的情况.这便是中文路径导致的,具体解决方式如下: 一.开始 用C++的fstream打开中文路径或者中文文件名的文件时,可能会有乱码或者打不开的问题. 1: ifstream is(strFileName); 2: if (!is.is_open()) 3: { 4: return 0; 5: } 这里返回的是0,一般的原因都是路径的问题. 二.方法 1: //设置为系统缺省,并将原来的locale返回保存在loc中 2: std:

QT中文路径测试结果大全及方法

第一种:windows下最常用最有效,直接使用国标码 #include <QTextCodec> ..... QString fileName = QFileDialog::getOpenFileName(this,QString("读取匹配原图"),QString("E:\\"),QString("*.jpg *.bmp *.png")); if(fileName.isEmpty()) {     QMessageBox::warn

sqlite3实现中文路径sql文件导入另类解决方法

1.需求 程序要实现产品离线数据下载,故采用java端直接拼接sql文件,客户端下载sql文件,合并到本地数据库.性能还行局域网十几秒7兆多,但是存在一个sqlite或sql文件保存在中文路径下无法合并的问题 2.解决 主要原因是因为sqlite打开数据库时使用utf8打开,qt普遍采用unicode编码.网上方法较多,这里采用另外一种方法解决,采用相对路径避开中文路径的问题 3.代码片段 1.创建数据库 QString strdbpath(QDir::currentPath() + "/db&

gdal中文路径无法打开问题

在C#中使用OGR读写矢量数据时,需要引用“using OSGeo.OGR;”. 同时为了处理中文路径和中文字段,需要在开始设置下面两个属性,代码如下: //为了支持中文路径,请添加下面这句代码(大多数情况下不需要这句) //OSGeo.GDAL.Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","NO"); //为了使属性表字段支持中文,请添加下面这句 OSGeo.GDAL.Gdal.SetConfigOption(&quo

rapidxml读取包含中文路径的xml解析错误的解决方法

from http://blog.csdn.net/qinwei4072880/article/details/38865179 1.rapidxml不支持中文路径. 2.rapidxml不支持Unicode xml必须为utf-8编码. 解决方法: #ifdef _UNICODE setlocale(LC_ALL, "Chinese-simplified"); // 设置中文环境USES_CONVERSION;file<> doc(W2A(lpszXml)); setlo