欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

急sqlite 中文乱码,请大伙儿给支个招

更新时间: 2014-01-05 02:32:13 责任编辑: Author_N1

 

急!!!SQLITE 中文乱码,请大家给支个招
SQLITE版本是3.8.3 DATA ENCODING设置成"ANSI";
使用DELPHI 通过ADO写入数据,如果写入的中文,那么通过sqlite developer查看表里的数据时,发现中文都是乱码,必须要把DATA ENCODING换成“UNICODE”才行。
SQLITE的数据是UTF8编码的,那么我选择了“ANSI”后使用的编码就不是UTF8了吧?
但是为什么字符集是ANSI,但是显示的时候必须要用UNICODE呢?
--参考方法--
使用DELPHI 通过ADO写入数据,如果写入的中文,那么通过sqlite developer查看表里的数据时,发现中文都是乱码,必须要把DATA ENCODING换成“UNICODE”才行

要想完全 一致的插入查询不乱码,在写入之前,把字符串弄成utf-8编码,就行了。所有平台,所有编程语言都用一致的方式进行处理。
--参考方法--
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编码的,你可以转换成你需要的任何编码方式。
--参考方法--
你用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)
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:32:13
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/11094/
本文WWW.DOC100.NET DOC100.NET版权所有。