SQLite C / C ++ APIunsigned char *
が、より事実上のchar *
タイプではなく、テキスト値に対してsを返すのはなぜですか?
これは、SQLite APIの決定が文字列のような値に対して与えられた従来のアドバイスと反対に見えることを除いて、unsignedcharの質問にいくらか関連しています。char *
例えば:
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
SQLiteのドキュメントから:
(H13821) sqlite3_column_text(S,N) インターフェイスは、準備済みステートメント S の結果セットの現在の行の N 番目の列をゼロで終わる UTF-8 文字列に変換し、その文字列へのポインターを返します。
UTF-8 では、0x00 から 0xFF までの範囲のバイト値が必要です。char の範囲は、-0x80 から 0x7F (符号付き) または 0x00 から 0xFF (符号なし) です。unsigned を強制すると、UTF-8 文字列を適切にエンコードできます。
勝手な推測ですが、UTF-8 エンコーディングのサポートと関係があると思います。符号付き char 値は、0x7f より上のすべてが解釈可能である 7 ビット ASCII 環境でのみ意味があります。UTF-8 では、0x00 から 0xFF までのすべてを同等に使用できます。