DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 4
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 likefxl (雨意) ★☆☆☆☆ -
普通会员
2020/12/31 20:52:12
标题:
FireDAC读取Sqlite出现乱码问题,求教。。。 浏览:2075
加入我的收藏
楼主: 数据库是其它软件的,经过测试发现,那货写入中文字符串的时候,编码貌似是GBK,用FireDAC杂读取,出来都是个乱码。。。

为了方便大哥大姐测试,我上传了个数据库文件上来。

这个文件,是用Sqlite Admin创建的,里面写入了中文。

同样是用FireDAC读取不出中文。。。
此帖子包含附件:likefxl_20201231205212.rar 大小:448B
----------------------------------------------
-
作者:
男 dlfsystem (dlfsystem) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 0:51:20
1楼: 试试如下
   fdConn.Params.DriverID := 'SQLite';
   fdConn.Params.Database := sqlstr;
   fdConn.Params.Values['CharacterSet'] := 'utf8';
   fdConn.Params.Values['OpenMode'] := 'CreateUTF8';
   fdConn.Params.Values['StringFormat'] := 'UniCode';
----------------------------------------------
-
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2021/1/1 9:39:25
2楼: 我用
https://github.com/plashenkov/SQLite3-Delphi-FPC
多线程读写sqlite非常666
中文不乱码
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2021/1/2 12:19:36
3楼: SQLite Admin (beta)

Supported Languages:
German
English
French - [by Stephane Wierzbicki]
Portugues (BR) - [by mamede]
Spanish - [by Jenaro Centeno Gómez]
Dutch - [by Johan Samyn]
Simplified Chinese - [by Zuo Weiming]
Russian - [by Ormada]
Polish - [by Piotr Drozdowski]
Italian - [by Paolo Paniga]
Hungarian - [by Zsolt]
Norwegian - [by Glenn O Larsen]
Turkish - [by Ismail Ata KURT]
Czech - [by Robert Hroch]
Traditional Chinese - [by Ben Su]
Danish - [by Morten Skytte]
Greek - [by Papadoulas Konstantinos]
Catalan - [by Blas López]

http://sqliteadmin.orbmu2k.de/

http://download.orbmu2k.de/download.php?id=19
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 likefxl (雨意) ★☆☆☆☆ -
普通会员
2021/1/5 23:46:39
4楼: CharacterSet 这玩意,貌似对Sqlite无效。另外,我怀疑,本身这库,写入的是个GBK编码的字符串。
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2021/1/6 9:01:20
5楼: 我觉得没救了,要么自己看看能不能读取出来解码,要么用原来的软件导出后你重新导入。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/1/6 9:17:06
6楼: http://bbs.2ccc.com/topic.asp?topicid=577740
跟这个类似,  反过来,delphi 插入的中文,  别的语言也读成乱码..
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2021/1/6 10:07:12
7楼: maybe help you (or not)

-- SQLiteAdmin DB = MyNewDBSQLite3.s3db
-- VCL project test
-- FireDAC components

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Clear;
  //
  FDConnection1.Connected          := false;
  FDConnection1.Params.Values['Database']     := 'D:\RADRIOTests\VCL_SQLite_DB_Unicode_Test\MyNewDBSQLite3.s3db';
  FDConnection1.Params.Values['OpenMode']     := 'CreateUTF16';
  FDConnection1.Params.Values['StringFormat'] := 'Unicode';
end;


Memo1.Lines.Add('Field = Text_Any = ' + FDQuery1.FieldDefs.Items[1].FieldClass.ClassName); == Field = Text_Any = TWideStringField


按此在新窗口浏览图片

按此在新窗口浏览图片


FDConnection info:

==========
Connection definition parameters
==========
Database=D:\RADRIOTests\VCL_SQLite_DB_Unicode_Test\MyNewDBSQLite3.s3db
StringFormat=Unicode
OpenMode=CreateUTF16
DriverID=SQLite
==========
FireDAC info
==========
Tool = RAD Studio 10.3
FireDAC = 17.0.0 (Build 93731)
Platform = Windows 32 bit
Defines = FireDAC_NOLOCALE_META;FireDAC_MONITOR
==========
Client info
==========
Loading driver SQLite ...
DLL = <sqlite3_x86.obj statically linked>
Client version = 3.28.0
Compile options = DEFAULT_CACHE_SIZE=8000;DEFAULT_FILE_FORMAT=4;
  DEFAULT_JOURNAL_SIZE_LIMIT=1048576;
  DEFAULT_PAGE_SIZE=4096;DEFAULT_RECURSIVE_TRIGGERS;
  ENABLE_COLUMN_METADATA;ENABLE_DBSTAT_VTAB;
  ENABLE_FTS3;ENABLE_FTS3_PARENTHESIS;ENABLE_FTS4;
  ENABLE_FTS5;ENABLE_JSON1;ENABLE_RBU;ENABLE_RTREE;
  ENABLE_STAT4;HAS_CODEC;OMIT_AUTOINIT;TEMP_STORE=2;
  THREADSAFE=2;USE_URI
==========
Session info
==========
Current catalog = 
Current schema = 
Total changes = 0
Database encoding = UTF8
Encryption mode = <unencrypted>
Cache size = 10000
此帖子包含附件:emailx45_20211610712.zip 大小:648B
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2021/1/6 11:19:24
8楼: 楼主,你先告诉大家,他应该显示的是什么中文。
否则,你这等于是加密了。  
可能数据库的作者保密意思很强。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 likefxl (雨意) ★☆☆☆☆ -
普通会员
2021/1/8 0:50:47
9楼: to sail2000  emailx45 

嗯嗯,估计就是这原因,另外还有程序员习惯的问题。

可能早起的软件,本身编码就是ANSI,GBK之类的。并不是Unicode/UTF8之类。

Delphi 前面的版本,不也是这个样子的。。。

写入时,没转成Unicode...也可以说,人家为啥要转,人家写入进去,读取出来正常,就行了。。。
----------------------------------------------
-
作者:
男 likefxl (雨意) ★☆☆☆☆ -
普通会员
2021/1/8 0:54:33
10楼: to wang_80919
加密个啥嘛。。。其实,简单点就如上面俩大哥发的意思。。。

不同开发工具,向Sqlite里面写入的中文,很可能换个工具,读出来是乱码。。。

FireDAC,不知道有没有办法,解决这种问题。。。

主要是看它,一个是自带,一个是不需要Sqlite3.dll

所以,有点不想放弃它。。。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行89.84375毫秒 RSS