ほとんどの場合、テキストは非ASCIIエンコーディングである可能性があります。例えば、ユニコードである。
これは、ASCIIテーブルには0から127までの整数で表される文字しかないためです。アラビア文字を表すために使用できるものは何もありません。
- アラビア語(0600-06FF、224文字)
- アラビアサプリメント(0750-077F、48文字)
- アラビア表示形A:たとえば、Unicodeは、アラビア語を表現する5つの異なる範囲を使用しています(FB50-FDFF、608文字)
- アラビア表示形B(FE70-FEFF、140文字)
- ルミ数字記号(10E60-10E7F、31文字)
そして8ビットの値(char
タイプ、1バイトの長さを持つ)が許すより多くの文字/文字が存在する可能性があるので、それらの文字の一部(またはすべて)を表すためにワイド文字が使用されます。
結果として、文字列の長さは文字列の長さとバイト単位で異なります。私の前提は、sqlite3_bind_text
関数を使用すると、4番目のパラメータとしていくつかの文字を渡すのに対して、それはバイト数でなければならないということです。または、データベースから文字列を読み戻すときに、この長さを誤って解釈する可能性があります。 sqlite3_bind_text
ドキュメントは四番目のパラメータについてはこれを言っている:四番目の引数を持っているそれらのルーチンで
、その値は、パラメータのバイト数 です。明確にするには、数値は文字数ではなく、値の中の バイトの数です。 4番目の パラメータが負の場合、文字列の長さは最初のゼロターミネータまでのバイト数 です。
正しいことを必ず実行してください。
も参照してください:
幸運を!
メモリ内のテキストはどのようなエンコーディングですか? – millimoose