在使用DelphiXE3和SQLite3进行程序开发时,解决最后一个字符乱码的问题

简介: 在使用DelphiXE3和SQLite3进行程序开发时,如果使用原版的SQLiteTable3,当使用UTF8Decode函数之后,可能依然存在乱码问题,一个表现就是,最后一个汉字显示为框,后面跟一个问号,其他的汉字解码正常。

在使用DelphiXE3和SQLite3进行程序开发时,如果使用原版的SQLiteTable3,当使用UTF8Decode函数之后,可能依然存在乱码问题,一个表现就是,最后一个汉字显示为框,后面跟一个问号,其他的汉字解码正常。

后来跟踪了一下SQLiteTable3的源代码,从SQLite获取的字符串数据是正确的,但是因为TSQLiteTable的构造函数在读取SQLite返回的UTF8字符串时使用了setstring函数,强行将数据字段进行了转换,引起字符串长度出现错误,所以在UTF8Decode解码时出现了漏解码的问题。

这里给出一种解决方案,修复了该Bug。

1.将TSQLiteTable的构造函数Create中的setstring行改为:

      Var

         strStr: String;
         strValue: PWideChar;      

      //****************************************

      strStr := UTF8Decode(AnsiString(ptrValue));

      strValue := PWideChar(strStr);
      setstring(thisStringValue^, strValue, strlen(strValue));

因为在delphixe3中,setstring函数的第二个参数是PChar,也就是PWideChar类型。

2.在面在调用时,不需要再UTF8Decode解码

相关文章
|
SQL API 数据库
【SQLite】C++链接SQLite读数据乱码问题(非中文)
【SQLite】C++链接SQLite读数据乱码问题(非中文)
|
SQL 数据库管理
SQLite Expert字符间距过大的问题
如题,在 SQLite Expert 工具的SQL 窗口之中,字符间距过大。 解决方法为: 打开菜单: Tools --> options ,切换到 General 标签项。把 Encoding 设置为 ANSI ,保存。
779 0
|
4月前
|
存储 数据库连接 数据库
Android数据存储:解释SQLite数据库在Android中的使用。
Android数据存储:解释SQLite数据库在Android中的使用。
65 0
|
3月前
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
156 2
|
3月前
|
SQL 存储 数据库
48. 【Android教程】数据库:SQLite 的使用
48. 【Android教程】数据库:SQLite 的使用
46 1
|
3月前
|
存储 缓存 数据库
Android之SQLite数据库使用详解
Android之SQLite数据库使用详解
|
3月前
|
存储 数据库 Android开发
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
81 0
|
API 数据库 Android开发
Android 中SQLite数据库的使用详解
Android 中SQLite数据库的使用详解
81 0
|
数据库 Android开发 数据库管理
Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)
Android使用Room操作SQLite数据库让其变得无比高效和简洁(进一步完善用RecyclerView显示数据库中的数据)
69 0
|
4月前
|
XML 数据库 数据安全/隐私保护
Android App规范处理中版本设置、发布模式、给数据集SQLite加密的讲解及使用(附源码 超详细必看)
Android App规范处理中版本设置、发布模式、给数据集SQLite加密的讲解及使用(附源码 超详细必看)
63 0