1

MS-Active Directory からテキスト データを取得して Sqlite3 データベースに保存する C++ プログラムを作成しましたが、utf-8 エンコーディングに問題があります。

いくつかの読み取りによると、アクティブ ディレクトリからのデータは UTF-8 でエンコードされていますが、C++ から読み取る場合、Sqlite3 (デフォルトは utf-8) が UTF-8 として受け入れない「ワイド文字」 (wchar_t) として扱われます。 sqlite3_bind_text16を使用しない限り、「sqlite3_bind_text」のパラメーターに「char」のみを使用しますが、データベースのサイズが大きくなるため、使用したくありません。

関数「wcstombs_s」を使用して「wchar_t」から「char」に変換しようとしましたが、結果のデータが正しくありません。

唯一の方法は MultiByteToWideChar または WideCharToMultiByte を使用することだと読みましたが、変換のコストが非常に高いと読んだので試しませんでした。

あなたの誰かが同様の状況にあり、この問題に対するクリーンで効果的な解決策を見つけたかどうかを知りたい.

どうもありがとう!

4

1 に答える 1

1

UTF-8 エンコーディングで作成されたデータベースでを使用sqlite3_bind_text16してもサイズは大きくなりません。文字列はその場で UTF-8 に変換されます。

このページの「UTF-8 および UTF-16 のサポート」の段落を参照してください。

于 2012-06-29T14:54:07.763 に答える