爲什麼SQLite C/C++ API爲文本值返回unsigned char *
,而不是事實上的char *
類型?SQLite C/C++ API unsigned char *
這與the unsigned char問題有些相關,除了SQLite API的決定似乎與傳統的char *
給出的類似字符串值的建議相反。
例如:
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
爲什麼SQLite C/C++ API爲文本值返回unsigned char *
,而不是事實上的char *
類型?SQLite C/C++ API unsigned char *
這與the 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。字符的範圍可以從-0x80到0x7F(帶符號)或0x00到0xFF(無符號)。強制unsigned允許正確編碼UTF-8字符串。
在胡亂猜測我會說,它是與支持UTF-8編碼。帶符號的char值在7位ASCII碼環境中才有意義,其中0x7f以上的所有內容都可以解釋。在UTF-8中,0x00和0xFF之間的所有內容都可以同樣使用。
真的嗎?你能否提供顯示這種使用unsigned char *的示例文檔? – strager 2008-11-26 05:33:43
@strager:添加到問題中。 – cdleary 2008-11-26 06:34:59