4

为什么 SQLite C/C++ APIunsigned char *为文本值返回 s 而不是更实际的char *类型?

这与unsigned char问题有些相关,除了 SQLite API 的决定似乎与为char *类似字符串的值给出的传统建议相反。

例如:

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
4

2 回答 2

11

SQLite 文档

(H13821) sqlite3_column_text(S,N) 接口将准备好的语句 S 的结果集的当前行中的第 N 列转换为以零结尾的 UTF-8 字符串并返回指向该字符串的指针。

UTF-8 需要从 0x00 到 0xFF 的字节值。char 的范围可以从 -0x80 到 0x7F(有符号)或 0x00 到 0xFF(无符号)。强制无符号允许正确编码 UTF-8 字符串。

于 2008-11-26T06:45:03.260 回答
9

在一个疯狂的猜测中,我会说它与支持 UTF-8 编码有关。有符号字符值仅在 7 位 ASCII 环境中才有意义,其中 0x7f 以上的所有内容都可以解释。在 UTF-8 中,0x00 和 0xFF 之间的所有内容都可以平等使用。

于 2008-11-26T05:51:50.980 回答