UI(フォーム、フォント、すべて)にC++ zAppフレームワークを使用するアプリケーションがあります。我々は徐々にそれを.netフレームワークを使用するように変換し、最近ギリシャ文字が正しく表示されていないことがわかりました。ギリシャ語のテキストが正しく表示されない
アプリケーションの1つのバージョンでは、同じデータを両方表示するC#.netフォームとC++ zAppフォームがあります。このプロジェクトは、MS Visual Studio 2005でコンパイルされ、.net 2.0を使用します。 .net形式では、ギリシャ語は正しく表示されません。 .netフォームからテキストをコピーしてzAppフォームに貼り付けると、zAppフォームに正しく表示されます。これは、データが正常にロードされていることと、すべての正しい情報が文字列内にあることを示しています。
.netコードで使用されているフォントを変更しようとしました。 zAppコードは、ギリシャ語を表示するコントロールのLOGFONT構造体を使用してフォントを作成します。私はzAppに使用されていた正確な値をとり、それらの値でLOGFONTを作成し、その構造(this.Font = Font.FromLogFont((オブジェクト)lFont);)を使用して.netフォームのフォントを設定しました。同じfacename、charsetなどを使用しました。LOGFONT構造のすべてが設定されています。ギリシャ語はまだ間違って表示されました。下線を引くとテキストに下線が引かれ、LOGFONTで設定した後にコントロールのフォント(this.Font)のプロパティを見ると、私は作成したフォントが使用されていることがわかりますそれらを期待してください。私は当初、真のタイプのフォントではないフォントで問題を抱えていましたが、zAppフォントを真のタイプのフォントに切り替えました。それでも私はテスト(Microsoft Sans Serif)に使用しました。
また、キーボードからギリシャ文字を入力すると、.net形式とzApp形式の両方で正しく表示されますが、.net形式で入力されデータベースに保存された文字は、 zAppフォームで保存されたデータとは異なります。繰り返しますが、.netフォームからガベージのように見えるテキストをコピーしてzAppフォームに貼り付けると、データは失われません。
誰にもアイデアはありますか?
OracleテキストがUTF-8ではありませんか?私は、高次のビットは、与えられた文字にさらに多くのバイトがあるかどうかを定義するために使用されることを知っています。したがって、UTF-8では、すべての文字が同じ長さであるわけではありません。あなたのソリューションは、通常のラテン文字では機能しません。 –
テキストはVARCHAR2に格納されるため、WE8ISO8859P1文字セットを使用します。 (AL16UTF16はNLS_NCHAR_CHARACTERSETの設定です)。 – AAyres