gpt4 book ai didi

c - SQLite3 存储不可读的文本

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:26 24 4
gpt4 key购买 nike

我使用 SQLite3 来实现小型应用程序来读取或写入数据库。一些需要添加到数据库中的记录是阿拉伯语文本,当它们存储到数据库中时,它们会转换为不可读和不可理解的文本。我使用这些 API 进行写入和读取:

  • sqlite3_open
  • sqlite3_prepare
  • sqlite3_bind_text
  • sqlite3_step

我能做些什么来解决这个问题?

最佳答案

很可能您的文本采用非 ASCII 编码。例如,在 unicode 中。

这是因为ASCII表中只有0到127的整数表示的字符,所以没有什么可以用来表示阿拉伯字母的。例如,Unicode 使用五个不同的范围来表示阿拉伯语:

  • 阿拉伯语(0600—06FF,224 个字符)
  • 阿拉伯语补充(0750—077F,48 个字符)
  • 阿拉伯文表示形式-A(FB50—FDFF,608 个字符)
  • 阿拉伯文表示形式-B(FE70—FEFF,140 个字符)
  • 鲁米数字符号(10E60—10E7F,31个字符)

并且由于可以有更多的字母/字符,8位值(char类型,长度为1个字节)将允许,宽字符用于表示一些(甚至所有)这些字母。

因此,以字符为单位的字符串长度将不同于以字节为单位的字符串长度。我的假设是,当您使用 sqlite3_bind_text 函数时,您将一些字符作为第四个参数传递,而它应该是一些字节。或者您在从数据库中读回字符串时可能会误解此长度。 sqlite3_bind_text 文档对第四个参数是这样说的:

In those routines that have a fourth argument, its value is the number of bytes in the parameter. To be clear: the value is the number of bytes in the value, not the number of characters. If the fourth parameter is negative, the length of the string is the number of bytes up to the first zero terminator.

确保你在那里做正确的事。

另见:

祝你好运!

关于c - SQLite3 存储不可读的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7868156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com