Почему API SQLite C / C++ возвращает unsigned char * для текстовых значений, в отличие от более де-факто типа char *?
Это в некоторой степени связано с вопросом беззнаковый символ, за исключением того, что решение SQLite API кажется противоположным традиционному совету char * для строковых значений.
Например:
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
@strager: Добавил к вопросу.





На первый взгляд я бы сказал, что это как-то связано с поддержкой кодировки UTF-8. Знаковые значения char имеют смысл только в 7-битной среде ASCII, где все, что выше 0x7f, открыто для интерпретации. В UTF-8 все значения от 0x00 до 0xFF могут использоваться одинаково.
Я тоже пришел к такому выводу (без исследования).
Я тоже пришел к такому выводу (/ with / research; см. Мой ответ).
да, поэтому я поддержал ваш ответ. Я действительно пошел искать доказательства, но у меня просто не было времени.
(H13821) The sqlite3_column_text(S,N) interface converts the Nth column in the current row of the result set for the prepared statement S into a zero-terminated UTF-8 string and returns a pointer to that string.
UTF-8 требует значений байтов от 0x00 до 0xFF. char может находиться в диапазоне от -0x80 до 0x7F (со знаком) или от 0x00 до 0xFF (без знака). Принуждение к беззнаковому разрешению позволяет правильно кодировать строку UTF-8.
Действительно? Можете ли вы предоставить пример документации, показывающий использование unsigned char *?