2

私は現在、C++ で記述され、MS Access バックエンドで True OLE DBGrid を使用するプロジェクトに取り組んでいます。GUI を変換してアラビア文字を表示できるようにする必要があるまでは、これですべてうまくいきます。DBGrid は Unicode を使用しないため、Unicode を使用せずにデータベースから文字を表示する方法が必要です。現在、地域の言語設定をアラビア語に設定しています。これを行ったときに、グリッドにアラビア語の文字を表示するように強制できますが、コードでは実行できません。実行時に英語とアラビア語を切り替える必要があります。データベースからデータを取得し、次のコードを使用して非 Unicode に変換できます。

_bstr_t tmp(vHolder.bstrVal, FALSE);   //wrap the BSTR
CString Caption(static_cast<const char*>(tmp));  //convert it
RetCaption = Caption;

これで、アラビア語を AfxMessageBox に投稿でき、正しく表示されますが、非 Unicode 文字を受け入れて正しく表示するようにグリッドを取得できないようです。

何か案は?

4

1 に答える 1

1
CString Caption(static_cast<const char*>(tmp));  //convert it

それはそれを変換しません。tmpに英語のテキストが含まれている場合は、1文字を生成します。そして、アラビア語のテキストが含まれている場合、ジバーの土地からの一般的なことわざ。OLEオートメーションおよび使用しているDBGridで使用されているUTF-16から8ビット文字への変換は、キャストでは実行できないため、変換関数が必要です。WideCharToMultiByteまたはOLE2Aのように。

このような変換では、スレッドのコードページが文字列で使用されている文字セットと一致する場合にのみ、読みやすいテキストが再現されます。これは、グリッドにアラビア語が表示され、スレッドまたは変換するコードページのいずれかが英語である場合、疑問符の束しか生成されません。

コードをUnicode対応にしたくない場合は、その場で文字セットを切り替えることはできません。このコードを実行しているオペレーティングシステムは、過去17年間このコードをサポートしています。

于 2010-07-01T21:25:23.033 に答える