SQLite3存储不可读的文本

时间:2011-10-23 18:24:17

标签: c database encoding sqlite

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

  • sqlite3_open
  • sqlite3_prepare
  • sqlite3_bind_text
  • sqlite3_step

我该怎么做才能解决问题?

1 个答案:

答案 0 :(得分:1)

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

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

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

由于可能有更多字母/字符,8位值(char类型,长度为1字节)允许,宽字符用于表示某些(或甚至全部)那些信件。

因此,字符串中的字符串长度将不同于字符串的长度(以字节为单位)。我的假设是当你使用sqlite3_bind_text函数时,你传递了许多字符作为第四个参数,而它应该是一个字节数。或者,当您从数据库中读取字符串时,您可能会错误地解释此长度。 sqlite3_bind_text文档说明了第四个参数:

  

在具有第四个参数的那些例程中,其值是数字   参数中的字节数。要清楚:值是数字   值中的字节数,而不是字符数。如果是第四个   参数为负数,字符串的长度是字节数   直到第一个零终止符。

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

另见:

祝你好运!