使用Delphi 11.3向SQLite存特殊字符后DBMemo显示乱码,求排查
Delphi SQLite 特殊字符显示乱码问题解决
这是Unicode编码不匹配导致的问题:SQLite默认以UTF-8存储文本,但你的FireDAC连接设置或数据插入方式没正确处理Unicode编码,导致Delphi控件读取时出现乱码。
具体解决步骤:
配置FireDAC连接的字符集
在FDConnection的参数中添加CharacterSet=utf8mb4(或utf8,utf8mb4支持更完整的Unicode字符),确保连接SQLite时使用UTF-8编码交互:FDConnection.Params.Add('CharacterSet=utf8mb4');改用参数化查询插入数据
不要直接将Unicode字符串硬编码到SQL语句中,参数化查询会自动处理编码转换,还能避免SQL注入风险:FDQry.SQL.Text := 'INSERT INTO Test (Var1, Var2) VALUES (:Var1, :Var2)'; FDQry.ParamByName('Var1').AsInteger := 1; FDQry.ParamByName('Var2').AsString := '$£¥€'; FDQry.ExecSQL;硬编码字符串时,Delphi可能会把Unicode字符串转成ANSI编码再传递,导致SQLite存储的编码错乱。
确认表字段类型
确保Test表的Var2字段类型为TEXT,SQLite的TEXT类型原生支持UTF-8存储,更适合Unicode文本。检查DBMemo控件设置
确认DBMemo的Font.Charset属性设置为DEFAULT_CHARSET或UNICODE_CHARSET,保证控件能正确渲染Unicode字符。
内容的提问来源于stack exchange,提问作者Ruud Schmeitz
相关产品推荐
相关产品推荐

