为什么 SQLite C/C++ APIunsigned char *
为文本值返回 s 而不是更实际的char *
类型?
这与unsigned char问题有些相关,除了 SQLite API 的决定似乎与为char *
类似字符串的值给出的传统建议相反。
例如:
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
(H13821) sqlite3_column_text(S,N) 接口将准备好的语句 S 的结果集的当前行中的第 N 列转换为以零结尾的 UTF-8 字符串并返回指向该字符串的指针。
UTF-8 需要从 0x00 到 0xFF 的字节值。char 的范围可以从 -0x80 到 0x7F(有符号)或 0x00 到 0xFF(无符号)。强制无符号允许正确编码 UTF-8 字符串。
在一个疯狂的猜测中,我会说它与支持 UTF-8 编码有关。有符号字符值仅在 7 位 ASCII 环境中才有意义,其中 0x7f 以上的所有内容都可以解释。在 UTF-8 中,0x00 和 0xFF 之间的所有内容都可以平等使用。