1

私は C++ で作業しており、SQLite データベースを扱っています。このことを考慮:

 wchar_t s[] = L"This is my wide string. ĂÎȘȚÂăîșțâ";

この文字列を含むクエリを起動するにはどうすればよいですか? たとえば、クエリを宣言すると、

 char q[] = "SELECT * FROM 'mydb' WHERE 'something' LIKE '%ĂÎȘȚÂ%'";

コンパイラはこれらのワイド文字を何らかの方法で変換するのに十分スマートであり、クエリは実際に期待どおりに機能します。それでも、これらの厄介な文字を含めるには、文字のクエリ配列をどのように宣言/作成する必要がありますか? stringとそのc_str方法などを試してみましたwstring...

私はかなり絶望的です。ヒントをお寄せいただきありがとうございます。

4

1 に答える 1

2

SQL を文字列連結で構成していませんか? プレースホルダーを使用して、文字列を正しいプレースホルダーにバインドします。

char q[] = "SELECT * FROM 'mydb' WHERE 'something' LIKE ?";
// ... create sqlite statement
wstring p = L"ĂÎȘȚÂăîșțâ";
sqlite3_bind_text16(stmt, 1, ("%"+p+"%").c_str(), -1, SQLITE_TRANSIENT);

ただし、このコードはワイド文字列に UTF-16 を使用するシステム (基本的には Windows のみ) でのみ機能します。携帯性がないので使用しないこと をお勧めします。代わりに、狭い文字の UTF-8 でエンコードされた文字列を使用してください。SQLite は、ファイル名であっても、Windows であっても、すべてのナロー char 文字列が UTF-8 であると想定します。このアプローチを使用すると、ファイルを BOM なしの UTF-8 として保存するだけで、元のコードを機能させることができます。これにより、文字列が作成されますwchar_t

char q[] = "SELECT * FROM 'mydb' WHERE 'something' LIKE '%ĂÎȘȚÂ%'";

主要なコンパイラ (MSVC および GCC を含む) でエンコードされた UTF-8。

于 2012-07-03T18:11:07.940 に答える