2016-12-14 2 views
2

SQLiteデータベースに書き込む古いMFC C++アプリケーションとデータベースから読み込むC#アプリケーションがあります。SQLiteデータベースからの非Unicode、非英語のテキストの読み取り

C++アプリケーションでは、ロシアのWindowsコンピュータからデータベースに "катопотокаработы"(キリル文字)を書き込みます。

同じC++アプリケーションが西ヨーロッパ(ラテン)Windowsコンピュータでそれを読み取ると、 "øàãïîòîêààààáîòû"(ラテン語表記)として読み取られます。

C#アプリケーションがそれを読み取ると、 " "(Unicode表現)として読み取られます。

これらのアプリケーションのうち、データベースの特定のエンコードタイプはありません。私はC#の元のテキストを読んでみたい。

テキストを読むときにエンコーディングタイプを指定する適切な方法が見つかりませんでした。

Data Source=c:\mydb.db;Version=3;UTF8Encoding=True;などの接続文字列を試しましたが、これまでのところ運がありませんでした。

また、 " "からバイト配列を取得してキリル文字に変換しようとしましたが失敗しました。

誰かが元のロシア語のテキストをSQLiteデータベースから読み込む方法を知っていますか?

答えて

4

SQLite C APIのすべての通常の関数は、UTF-8を使用します。 C#SQLiteドライバは、UTF-8とC#の文字列エンコーディングを自動的に変換します。

C#プログラムから正しいデータが得られない場合、C++アプリケーションは実際にはUTF-8ではない可能性があります。これは、C++アプリケーションが異なるコードページで異なる結果を出すという事実によって確認されます。

可能であれば、C++アプリケーションを修正するか、データベースのデータを元のエンコーディングからUTF-8に変換します。最後の手段として、C#アプリケーションを変更してすべての文字列をブロブとして読み込み、元のエンコーディングからUTF-8に変換することができます。 (いずれの場合でも、元のエンコーディングが何であるかを知る必要があります)

+0

私が言ったように、それは最後の手段になります。最初は正しいエンコーディングを使用するべきです。 –

関連する問題