- PR -

Oracle「〜」文字が化ける現象

投稿者投稿内容
mm
会議室デビュー日: 2004/09/25
投稿数: 17
投稿日時: 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.で正常にデータを取得することが
出来ないのでしょうか?
現状、システムは稼動しており、簡単にサーバ側の再構築を
行うことが出来ない状況です。
クライアント側だけで何かしらの対処方法があるのでしょうか?

ネット検索等で色々調べておりますが、全く分からない状態です。
皆様からのお知恵をお借り出来ればと思っております。

ご教授宜しくお願い致します。
Beatle
ぬし
会議室デビュー日: 2003/06/09
投稿数: 394
投稿日時: 2004-10-21 10:20
推測ですが、Unicodeがらみの問題かと。

つまり、「〜」(波線)をUnicodeに変換する際(または戻す際)、
Unicode側の「FULLWIDTH TILDE」に変換されるか、「WAVE DASH」に変換
されるかということではないかと。(.net C#では「WAVE DASH」に変換されて
しまっている?見た目は同じ文字なので...)

規格の問題と言えばそれまでですが、IBM拡張文字とかと同様、現在の環境であれば、
表示に問題がある側のアプリで変換をかけるか、使用しないようにするかしかないの
でしょうかね。
mm
会議室デビュー日: 2004/09/25
投稿数: 17
投稿日時: 2004-10-21 10:37
>Beatleさん

早々のお返事ありがとうございます。
Unicode変換のお話ですが、Oracleサーバ側のキャラクタセットを
クライアント側と合わせた場合(JA16SJISTILDE)、
正常に「〜」文字が取得出来るというのは、.net側で
「〜」をFULLWIDTH TILDEに変換されるようになるという
ことでしょうか?(キャラクタセットを合わせないと、
WAVE DASHに変換されてしまう?)


よく理解出来て居らず、変な質問をしているかもしれません。
.netでのUnicode文字について調べてみます。

Beatle
ぬし
会議室デビュー日: 2003/06/09
投稿数: 394
投稿日時: 2004-10-21 10:55
引用:

マミさんの書き込み (2004-10-21 10:37) より:

Unicode変換のお話ですが、Oracleサーバ側のキャラクタセットを
クライアント側と合わせた場合(JA16SJISTILDE)、
正常に「〜」文字が取得出来るというのは、.net側で
「〜」をFULLWIDTH TILDEに変換されるようになるという
ことでしょうか?(キャラクタセットを合わせないと、
WAVE DASHに変換されてしまう?)




.net側と書きましたが、正確にはどこで誤変換しているのか調べないと
私にはわかりません。
ただ、DB側とクライアント側のキャラクタセットを異なるものにした場合
にのみ発生するのであれば、.net側じゃないかも...キャラクタセット
は合わせるのが基本ですから...
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-10-21 12:43
マミさん、こんにちは。

この辺↓の話が参考になるかも知れません。
Top > @IT会議室 > Insider.NET 会議室 > 文字化け(WAVE DASH 問題)について
Top > @IT会議室 > Insider.NET 会議室 > 文字コードの変更
mm
会議室デビュー日: 2004/09/25
投稿数: 17
投稿日時: 2004-10-21 14:15
>Beatleさん

お返事ありがとうございます。
ご指摘の通り、DBのキャラクタセットについて
サーバ側、クライアント側の設定を一致させるのが
基本だと思います。今回はサーバ側の設定を変えるのが
難しい為、次回構築時は意識合わせを行おうと思います。
ご教授ありがとうございました。


>きくちゃんさん

お返事ありがとうございます。
教えていただいたリンク先の記事を読みました。
コード変換での障害、勉強になりました。
今回はReplaceをかけて対応する方向で
考えたいと思います。ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-23 06:36
 台風で接続できない間に終わっているのかもしれませんが。


 サーバとクライアントでキャラクタセットをあわせて(クライアント側は変更できますよね?)、MS製のドライバを使えば、MS製のドライバが変換してくれるはずですけど?
_________________
mm
会議室デビュー日: 2004/09/25
投稿数: 17
投稿日時: 2004-10-23 14:43
>Jittaさん

お返事ありがとうございます。

投稿した質問内容が悪かったかもしれません。

取得したデータをラベルやメッセージボックス等で
表示する分には「〜」が表示されます。
------------------------------------------
#ただ、見た目が違いますが・・。
 ご指摘内容は、この事だと思ったのですが、
 間違っていればご指摘お願い致します。
------------------------------------------
DataReaderから取得したデータをファイルに落とし、
ファイルの内容を画面表示した場合は「?」と表示されます。
DataReaderから戻ってきた値を確認すると、見た目は
「〜」なのですが、文字コードが「0x3F」となっています。

間違い等ありましたらご指摘・ご教授お願い致します。

スキルアップ/キャリアアップ(JOB@IT)