10g ODBC接続 での文字化け対策
981379Dec 22 2012 — edited Dec 25 2012●構成
・DBサーバ
WindowsXP(試験環境のため)
Oracle 10g (Release2)
データベースキャラクタセット:utf-8
・クライアント
Windows7
Visual studio 2010 C#.Net(.NetFramework 3.5)
NLS_LANG = utf-8
Oracle ODBC ドライバ接続
●事象
このような環境だと、C#アプリ側で画面表示する全角文字が文字化けしますが
これはWindows環境で、NLS_LANG = utf-8にしていることが起因します。
文字変換のロジックを追加していますが、下記問題があり、ご相談する次第です。
●経緯
当初、クライアントのNLS_LANG は、s-jis にしていました。
この時には文字化けの問題はありませんでした。
しかし、クライアントのNLS_LANGがutf-8でなければ文字化けする
他のクライアント製品と同じPC上で動作させなければならなくなりました。
このため、改造のできるC#アプリ側で文字化け対策を行うことにしました。
●対策
C#アプリ内で データベースの全角文字が utf-8 で来るようになったため
文字化けが発生するようになったのですが、このutf-8 データをutf-16に
変換することはできました。
●問題事象
ところが、カラムから取り出せる文字列が途中で切られてしまう現象が起こっています。
例えば
varchar(2) で定義しているカラムに "あい" と入っているとします。
C#アプリ内で、変換のため、System.Data.Odbc.OdbcDataReader.GetBytes()メソッドで
バイト単位で値を取り出すと 4バイトしか取り出せませんでした。
変換しても結果的に "あ・" という形になってしまいます。
utf-8であれば2文字( 6バイト)取り出して欲しいところなのですが。。。
utf-16での2文字分( 4バイト)しか取り出してもらえません。
●お聞きしたいこと
①本事象の根本原因について、情報をお持ちであればご提供願えませんでしょうか。
②ODBCドライバ設定など、環境設定の不備である可能性もあります。
見直すべきポイント、プロパティなどアドバイスがございましたら、お願いします。
③Microsoft製品については本フォーラムでは、議論すべきではありませんが
VisualStudioのビルド構成などの可能性もあります。
もし関連URLの情報など、お持ちでしたら、教えてください。
よろしくお願い致します。