博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决Sqlite中的中文路径问题
阅读量:6647 次
发布时间:2019-06-25

本文共 863 字,大约阅读时间需要 2 分钟。

今天打算用一下sqlite做数据库的,我用的是的封装,使用的时候发现一旦数据库路径中有中文的时候,则打开数据库失败

先google了一下,问题的原因大致是因为sqlite使用的是utf8编码,当unicode编码的字符串中传入中文时,自然就解析出错而找不到相关路径。网上给的解决方法大多是把字符串转换为utf8格式再使用,而.net只支持unicode格式的字符串,又不能直接操作内存,要转成utf8的形式是比较麻烦的(还是可以做,可以参看这篇文章)。

看了一下sqlite-net的封装,它是通过封装函数sqlite3_open来打开数据库的。

    [DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]

    public static extern Result Open ([MarshalAs(UnmanagedType.LPStr)] string filename, out IntPtr db);

然后到sqlite的官网上找了一下对这个函数的(中文版可以参看这个),发现它还提供了一个sqlite3_open16函数,这个是支持unicode字符串的。并且sqlite-net也提供了对这个函数的封装,不知道为什么作者没有使用这个函数。

    [DllImport("sqlite3", EntryPoint = "sqlite3_open16", CallingConvention = CallingConvention.Cdecl)]

    public static extern Result Open16([MarshalAs(UnmanagedType.LPWStr)] string filename, out IntPtr db);

找到方法后,接下来的就简单了,把之前调用Open的地方改成Open16就可以了(或者直接把Open函数删掉,Open16函数命名为Open)。

 

 

转载地址:http://xbuto.baihongyu.com/

你可能感兴趣的文章
转:: 刺鸟:用python来开发webgame服务端(4)
查看>>
十款被人忽视的堪称神器的软件【纯干货】
查看>>
ZOJ 3596Digit Number(BFS+DP)
查看>>
检测Java程序运行时间的2种方法(高精度的时间[纳秒]与低精度的时间[毫秒])...
查看>>
JAVA基础知识|集合
查看>>
poj 2752 - Seek the Name, Seek the Fame
查看>>
exforce_download() -- 对CI中force_download()增强后的函数(不依赖CI)
查看>>
第七次课后作业
查看>>
Python中创建守护进程
查看>>
TOJ 2703: Cow Digit Game
查看>>
将字典转换成变量, 字符串与列表相互转换
查看>>
架构中的7个设计原则
查看>>
SDUT 3374 数据结构实验之查找二:平衡二叉树
查看>>
php的错误级别
查看>>
eclipse修改android项目的apk包名类名
查看>>
斐讯路扫地机器人怎么关机_扫地机器人使用方法,使用教程
查看>>
java 二元一次方程式_JAVA求解一元一次二次方程
查看>>
python与r语言处理excel数据_R语言第一章数据处理基础①读取EXEL表格数据
查看>>
上一家单位离职的原因_你从上一家公司辞职的原因是什么?几类标准答案
查看>>
ip扫描的原理是什么_什么是高防IP,高防IP的原理是什么样的
查看>>