- - PR -
Oracle「〜」文字が化ける現象
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-21 09:20
[テスト環境]
---------------------------------------- WindowsXP(SP1、SP2)、.NET2003 C#(Winアプリ)、 Oracle9.2.0.1.0、FrameWork1.1(SP有り、SP無し) ---------------------------------------- いつもお世話になっております。 Oracleからのデータ取得で「〜」文字が化ける現象で 教えていただきたいことがあります。 次の手順でテストを行いました。 -------------------------------------------------- 1. Oracle9.2サーバを構築 この時のキャラクタセットはデフォルト(JA16SJIS) -------------------------------------------------- 2. 別マシンにOracle9.2クライアントをインストール この時、レジストリのNLS_LANGをJA16SJISTILDEに変更。 -------------------------------------------------- 3. テストテーブルを作成し、「〜」文字データを入力 -------------------------------------------------- 4. SQLPlusからこのデータを取得し確認、正常に「〜」文字が 表示されました。 -------------------------------------------------- 5. Common SQL Environmentから接続し、データを表示。 正常に表示されることを確認しました。 -------------------------------------------------- 6. VB6.0(SP5)でMicrosoft ActiveX Data Objects 2.7 Libraryを 参照設定し、Oracleサーバへ接続+データ取得を行い 正常に「〜」が表示されることを確認しました。 -------------------------------------------------- ※ 5、6は文字コードが[0x81 0x60]であることも確認しました。 -------------------------------------------------- 7. .NET2003 C#からテストアプリを作成し、 OleDB、OlacleClient両方でDBへの接続テストデータの取得を行い、 取得出来た文字を確認したところ 「〜」→「?」となりました。この時の文字コードは「0x3F」です。 -------------------------------------------------- 8. Oracleサーバの再構築を行い、DBのキャラクタセットを JA16SJISTILDEに変更し、再度(7)を確認したところ 正常に「〜」文字が取得出来ました。 -------------------------------------------------- 何故、.NETの場合だけ7.で正常にデータを取得することが 出来ないのでしょうか? 現状、システムは稼動しており、簡単にサーバ側の再構築を 行うことが出来ない状況です。 クライアント側だけで何かしらの対処方法があるのでしょうか? ネット検索等で色々調べておりますが、全く分からない状態です。 皆様からのお知恵をお借り出来ればと思っております。 ご教授宜しくお願い致します。 | ||||
|
投稿日時: 2004-10-21 10:20
推測ですが、Unicodeがらみの問題かと。
つまり、「〜」(波線)をUnicodeに変換する際(または戻す際)、 Unicode側の「FULLWIDTH TILDE」に変換されるか、「WAVE DASH」に変換 されるかということではないかと。(.net C#では「WAVE DASH」に変換されて しまっている?見た目は同じ文字なので...) 規格の問題と言えばそれまでですが、IBM拡張文字とかと同様、現在の環境であれば、 表示に問題がある側のアプリで変換をかけるか、使用しないようにするかしかないの でしょうかね。 | ||||
|
投稿日時: 2004-10-21 10:37
>Beatleさん
早々のお返事ありがとうございます。 Unicode変換のお話ですが、Oracleサーバ側のキャラクタセットを クライアント側と合わせた場合(JA16SJISTILDE)、 正常に「〜」文字が取得出来るというのは、.net側で 「〜」をFULLWIDTH TILDEに変換されるようになるという ことでしょうか?(キャラクタセットを合わせないと、 WAVE DASHに変換されてしまう?) # よく理解出来て居らず、変な質問をしているかもしれません。 .netでのUnicode文字について調べてみます。 | ||||
|
投稿日時: 2004-10-21 10:55
.net側と書きましたが、正確にはどこで誤変換しているのか調べないと 私にはわかりません。 ただ、DB側とクライアント側のキャラクタセットを異なるものにした場合 にのみ発生するのであれば、.net側じゃないかも...キャラクタセット は合わせるのが基本ですから... | ||||
|
投稿日時: 2004-10-21 12:43
マミさん、こんにちは。
この辺↓の話が参考になるかも知れません。 Top > @IT会議室 > Insider.NET 会議室 > 文字化け(WAVE DASH 問題)について Top > @IT会議室 > Insider.NET 会議室 > 文字コードの変更 | ||||
|
投稿日時: 2004-10-21 14:15
>Beatleさん
お返事ありがとうございます。 ご指摘の通り、DBのキャラクタセットについて サーバ側、クライアント側の設定を一致させるのが 基本だと思います。今回はサーバ側の設定を変えるのが 難しい為、次回構築時は意識合わせを行おうと思います。 ご教授ありがとうございました。 >きくちゃんさん お返事ありがとうございます。 教えていただいたリンク先の記事を読みました。 コード変換での障害、勉強になりました。 今回はReplaceをかけて対応する方向で 考えたいと思います。ありがとうございました。 | ||||
|
投稿日時: 2004-10-23 06:36
台風で接続できない間に終わっているのかもしれませんが。
サーバとクライアントでキャラクタセットをあわせて(クライアント側は変更できますよね?)、MS製のドライバを使えば、MS製のドライバが変換してくれるはずですけど? _________________ | ||||
|
投稿日時: 2004-10-23 14:43
>Jittaさん
お返事ありがとうございます。 投稿した質問内容が悪かったかもしれません。 取得したデータをラベルやメッセージボックス等で 表示する分には「〜」が表示されます。 ------------------------------------------ #ただ、見た目が違いますが・・。 ご指摘内容は、この事だと思ったのですが、 間違っていればご指摘お願い致します。 ------------------------------------------ DataReaderから取得したデータをファイルに落とし、 ファイルの内容を画面表示した場合は「?」と表示されます。 DataReaderから戻ってきた値を確認すると、見た目は 「〜」なのですが、文字コードが「0x3F」となっています。 間違い等ありましたらご指摘・ご教授お願い致します。 |