5

現在、sqlite と c++ を使用してマネージャー ゲームを構築しています。ゲームの作成に必要なほぼすべての領域をカバーするチュートリアルを見つけましたが、マイナーな問題が何年もの間私を悩ませてきました。

「Andreas Klöden」などの文字列を c++ で記述し、それを sqlite ステートメントで使用して sqlite DB にデータを挿入すると、ウムラウト ö を含む特殊文字が失われます。これは、Léfevre、Würth などの多くのヨーロッパの名前に当てはまります。

私は答えを探しました.C++文字列はANSIIまたはそのようなものにあるようです. 以下に示す問題を回避するには、代わりにユニコード文字列を記述する必要があります。

http://imageshack.dk//viewimage.php?file=/imagesfree/0Ej53884.png

sqlite DB から正しいデータをエクスポート/インポートできるように、C++ でユニコード文字列を記述する方法を知っている人はいますか?

4

2 に答える 2

4

SQLite は UTF-8 を「サポート」します (基本的に UTF8 は ASCII 文字のみを使用するため、実際に「サポート」するものは何もないため、引用符はここにあります)。そのため、最善の (かつ下位互換性のある) 方法の 1 つは、UTF-8 エンコーディングを使用することです。SQLite の wchar_t サポートも存在しますが、それを使用する理由は 1 つだけです: コードが既に wchar_t に依存している場合。

「UTF-8」がなじみのないトピックである場合は、これをお読みください: http://www.joelonsoftware.com/articles/Unicode.html

C API の呼び出し

sqlite_exec(db_conn, "insert somevalue into sometable values(\"utf encoded string\""), NULL, NULL, "error");

仕事をするでしょう。

限られた量のコードページのみをサポートする必要がある場合、または完全なサポートのために ICU ライブラリを使用する必要がある場合は、実際の変換を手動で行うことができます。http://utfcpp.sourceforge.net/のようなライブラリもあります

CodeProject には、多くの UTF-8 サンプル コードもあります。

http://www.codeproject.com/Articles/14637/UTF-8-With-C-in-a-Portable-Way

http://www.codeproject.com/Articles/5281/UTF-8-Encoding-and-Decoding

于 2012-05-12T20:32:28.347 に答える
-1

CppSqlite3U は、UNICODE をサポートしていない sqlite3 のラッパーとして開発されました。CppSqlite3Uは、UNICODE 呼び出しのフロント エンドとして使用できます。

于 2016-02-21T17:12:06.497 に答える