2008-11-26 3 views
3

Почему SQLite C/C++ API возвращает unsigned char * s для текстовых значений, в отличие от более де-факто char *?SQLite C/C++ API unsigned char *

Это связано с вопросом the unsigned char, за исключением того, что решение API SQLite похоже на рекомендацию char *, приведенную для строковых значений.

Например:

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

Действительно? Можете ли вы предоставить пример документации, показывающей это использование unsigned char *? – strager 2008-11-26 05:33:43

+0

@strager: Добавлен вопрос. – cdleary 2008-11-26 06:34:59

ответ

10

От SQLite documentation:

(H13821) sqlite3_column_text (S, N) интерфейс преобразует N-й столбец в текущей строке результирующего набора для подготовленных операторов S в нулем UTF-8 string и возвращает указатель на эту строку.

UTF-8 требует значений байтов от 0x00 до 0xFF. char может варьироваться от -0x80 до 0x7F (подписано) или от 0x00 до 0xFF (без знака). Принуждение без знака позволяет правильно кодировать строку UTF-8.

9

В диком догадка я бы сказал, что у него есть что-то делать с поддержкой кодировки UTF-8. Подписанные значения char имеют смысл только в 7-битной среде ASCII, где все выше 0x7f открыто для интерпретации. В UTF-8 все между 0x00 и 0xFF можно использовать одинаково.

Смежные вопросы