sqlite乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite乱码相关的知识,希望对你有一定的参考价值。
sqlite3 存储类型为nvarchar 类型,用c#读出来汉字内容却是乱码,而英文字母却是正确的,在网上搜索了一下问题出在sqlite3的编码问题上,它是utf8 格式,怎么解决这个汉字乱码问题?
c#里面 sqlite ado 存是以 utf8存, 取的时候是以utf8格式取的,所以没问题。c++里写入是以ansi写入的,取的时候是以ansi 取的也没问题,而c++里以ansi写入 在c#里 sqlite ado以utf8取所以就出现乱码问题了。解决问题的根本就在于让 c++写入 适合sqlite 读取,也就是让c++写入时以utf8格式写入具体代码如下:string GBKToUTF8(std::string& strGBK) string strOutUTF8 = ""; wchar_t * str1; int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0); str1 = new WCHAR[n]; MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n); n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL); char * str2 = new char[n]; WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL); strOutUTF8 = str2; delete[]str1; str1 = NULL; delete[]str2; str2 = NULL; return strOutUTF8;方便广大网友省一些时间! 参考技术A 一种方式是:设置数据编码为 GB2312 ..(在SQLite数据库管理器那边可以改)..[推荐]然后不然就是在代码里面重新转换数据..这种方式比较麻烦,也耗资源...思路是先将从sqlite数据库读取出的nvarchar 转换成byte[] 数组..然后 调用 System.Text.Encoding.Unicode.GetString(byte[] 数组); 它返回的应该是 无乱码的数据了.只是一时想到的两种方式.. 可能还有好的解决办法吧...
svn 更新文件冲突,提示中文乱码解决
问题描述:
update 操作提示错误信息,中文乱码 和 “Please execute the ‘Cleanup‘ command.”
Cleanup 操作报错:
解决办法:
1. 工具下载(sqlite3.exe):
链接:https://pan.baidu.com/s/1OXWMZPCsmRNEe3FluIdRuQ密码:v773
<sqlite3.exe>解压到指定目录,<D:SVN>
2. 找到<wc.db>
一般在svn文件默认目录下, .svnwc.db
PS:文件夹选项设置,改为显示隐藏文件。
3. 将<wc.db> 放置到<sqlite3.exe>目录下,也就是<D:SVN>下面
4. 进入控制台(win+R;cmd进入),切换至<D:SVN>路径下
5. 执行命令:
① sqlite3 wc.db //进入到wc.db中
② select * from work_queue; //查看work_queue表中是否有乱码
③ delete from work_queue; //删除即可
④ 关闭dos窗口
6. 将<wc.db>文件复制回原路径,重新执行cleanup操作,查看结果
结果显示为被锁定,继续重复上面操作
① sqlite3 wc.db //进入到wc.db中
② delete from WC_LOCK; //删除锁定表的数据
7. 操作后文件回复原位,查看显示
8. 不再报错,问题解决
以上是关于sqlite乱码的主要内容,如果未能解决你的问题,请参考以下文章
QString和std::string转换乱码与sqlite存储汉字乱码