2008-11-26 100 views
3

爲什麼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); 
+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)界面的結果爲準備語句S設定的當前行中第N列轉換成一個零結尾的UTF-8字符串並返回一個指向該字符串的指針。

UTF-8希望字節值從0x00到0xFF。字符的範圍可以從-0x80到0x7F(帶符號)或0x00到0xFF(無符號)。強制unsigned允許正確編碼UTF-8字符串。

9

在胡亂猜測我會說,它是與支持UTF-8編碼。帶符號的char值在7位ASCII碼環境中才有意義,其中0x7f以上的所有內容都可以解釋。在UTF-8中,0x00和0xFF之間的所有內容都可以同樣使用。