急!!!SQLITE 中文乱码,请大家给支个招

zsddtxwd3 2011-05-13 10:39:48
SQLITE版本是3.8.3 DATA ENCODING设置成"ANSI";
使用DELPHI 通过ADO写入数据,如果写入的中文,那么通过sqlite developer查看表里的数据时,发现中文都是乱码,必须要把DATA ENCODING换成“UNICODE”才行。
SQLITE的数据是UTF8编码的,那么我选择了“ANSI”后使用的编码就不是UTF8了吧?
但是为什么字符集是ANSI,但是显示的时候必须要用UNICODE呢?
...全文
6773 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimos123 2012-08-15
  • 打赏
  • 举报
回复
Now all data are converted to utf8 data before inserting and utf8 data are converted to ansi data after reading from database even when the database's encoding is utf16. In near future, Sqlite Developer will support store data as utf16 in utf16 encoding database.
linyoweb 2011-12-12
  • 打赏
  • 举报
回复
或者使用sqlite3odbc来连接。
linyoweb 2011-12-12
  • 打赏
  • 举报
回复
sqliteodbc有个utf8版本,不知你使用的是不是这个版本(安装的时候要勾选上)。
qqsKat 2011-06-28
  • 打赏
  • 举报
回复
问题解决没?
zsddtxwd3 2011-05-18
  • 打赏
  • 举报
回复
有木有人了解odbc的?怎样才能改变它的字符集?
zsddtxwd3 2011-05-17
  • 打赏
  • 举报
回复
我试验了一下,如果我把“中国”用ansitoutf8转成utf8,再写到sqlite里,然后把developer的DATA ENCODING改成“ANSI”,那显示的是“娑擃厼娴”;如果把DATA ENCODING改成“UNICODE”,显示的是“涓 浗”;
如果在写到sqlite里不转成utf8的话,那么在ansi下显示的是“涓 浗”,在unicode下是“中国”;
各位看看编码的转换过程到底是个什么样的过程?sqlite对传递到它那的数据是怎样编码的?ansi或unicode对于显示的作用是什么呢?
zsddtxwd3 2011-05-17
  • 打赏
  • 举报
回复
我用sqlite developer管理数据库,在它上面有一个data encoding选项,可以选择ANSI或UNICODE,这个选项有什么作用?是控制数据库对数据的编码,还是控制以哪种编码显示数据库里的数据?
zsddtxwd3 2011-05-17
  • 打赏
  • 举报
回复
郁闷,估计是odbc强制把传递到sqlite的字符串给转成utf8了。大家知道怎样更改sqlite odbc的字符集吗?
WWWWA 2011-05-17
  • 打赏
  • 举报
回复
你用DELPHI,
1、function DecodeUtf8Str(const S: UTF8String): WideString;
var lenSrc, lenDst : Integer;
begin
lenSrc := Length(S);
if(lenSrc=0)then Exit;
lenDst := MultiByteToWideChar(CP_UTF8, 0, Pointer(S), lenSrc, nil, 0);
SetLength(Result, lenDst);
MultiByteToWideChar(CP_UTF8, 0, Pointer(S), lenSrc, Pointer(Result), lenDst);
end;
2、试试UTF8Decode(text)
zsddtxwd3 2011-05-17
  • 打赏
  • 举报
回复
忘记说了,我是用sqlite odbc连接sqlite的,怀疑和odbc的默认字符集有关,但是不知道怎么验证,sqlite odbc不像mysql odbc,它没有设置字符集的地方 。
iihero_ 2011-05-14
  • 打赏
  • 举报
回复
使用DELPHI 通过ADO写入数据,如果写入的中文,那么通过sqlite developer查看表里的数据时,发现中文都是乱码,必须要把DATA ENCODING换成“UNICODE”才行

要想完全 一致的插入查询不乱码,在写入之前,把字符串弄成utf-8编码,就行了。所有平台,所有编程语言都用一致的方式进行处理。
blaze1982 2011-05-14
  • 打赏
  • 举报
回复
sqlite编码方式由pragma encoding设定,只有以下几种
PRAGMA encoding; --查询当前编码方式,默认utf8
PRAGMA encoding = "UTF-8";
PRAGMA encoding = "UTF-16";
PRAGMA encoding = "UTF-16le";
PRAGMA encoding = "UTF-16be";

楼主应该应该将字符串编码设定为本地locale,然后存储到数据库,sqlite会自动转换成utf-8编码。读取的时候是utf-8编码的,你可以转换成你需要的任何编码方式。
ACMAIN_CHM 2011-05-13
  • 打赏
  • 举报
回复
设置成UTF-8,ANSI并不能很好的支持中文。
wwwwb 2011-05-13
  • 打赏
  • 举报
回复
http://www.sqlite.org/
Version 3.7.6.2 最高版本
默认UTF8字符集,写入的时候要转换成UTF8字符集
zsddtxwd3 2011-05-13
  • 打赏
  • 举报
回复
哥哥们,现在要求必须是ANSI,要不我也不愁了。
我发现,我在sqlite developer里直接向表写中文是没有问题的,只有用delphi 写的时候不行。
另外,我在delphi里写的汉字好像是unicode编码,比如,我写“A中”,然后得到它们的十六进制是“41 4E2D”,上网查了一下,好像4E2D是“中”的UCS2的编码,可是delphi7不是不支持unicode吗?
再说我电脑代码页是简体中文啊。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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