当前位置: 代码迷 >> 其他数据库 >> 急SQLITE 中文乱码,请大家伙儿给支个招
  详细解决方案

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

热度:196   发布时间:2016-05-05 08:20:52.0
急!!!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)
  相关解决方案