@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

オフコン→PC間での文字化け

投稿者投稿内容
MIRU
常連さん
会議室デビュー日: 2006/05/30
投稿数: 21
投稿日時: 2006-06-07 15:22
こんにちわ。
Webアプリを開発しております。

RDA-SV(V4.ODBC3.0)を使いオフコンサーバDBにアクセスし
データを取ってきているのですが、鰍(有)などが 〓 と表示されてしまいます。

〓 と変換される前の文字コードを取得しようと思ったのですが、
SQL文から返ってきたデータをDatasetにセットした時点では
文字コードは 〓 を現していて、変換前の文字コードの取得には失敗してしまいました。

どうにかして、Webアプリ側でこの問題を解決したいのですが、どういった解決法があるでしょうか?
ご教授、お願いいたします。

環境
VB.NET2003
.NET Framework 1.1

#15:39文章修正

[ メッセージ編集済み 編集者: MIRU 編集日時 2006-06-07 15:40 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-06-07 15:38
そのDBでの機種依存文字が、Windowsなんかで使われているShiftJISと同じところにマッピングされてないからでしょう。
もしかしたら外字エリアなのかも。
文字のマッピングを自前で用意して、変換関数を用意するしかないんじゃないでしょうか。
MIRU
常連さん
会議室デビュー日: 2006/05/30
投稿数: 21
投稿日時: 2006-06-07 15:58
>文字のマッピングを自前で用意して、変換関数を用意するしかないんじゃないでしょうか。

少し調べてみたのですが、上記が何を意味しているのか判りません。

マッピングは例えば、『オフコンコード 78D5 を Winコード 9339 』に
という指定を行なうことであるとは思うのですが、
変換関数というのがよく判りません。

出来れば、簡単な例などを示していただけないでしょうか。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-06-07 18:40
RDA-SV(V4.ODBC3.0)が正しく変換してくれず、変換に失敗した文字を、単一のコードに変換してしまう以上は、Webアプリ側で変換することは無理だと思います。
仮に、RDA-SV(V4.ODBC3.0)から取得した項目値をバイナリーデータレベルで取得できたとしても、自前で全ての変換を行わなければならなくなってしまいます。

オフコン側で機種依存文字を何とかするのが一番良い方法だと思うのですが・・・
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-06-07 19:38
>単一のコードに変換してしまう
うーん…。オフコン側でちゃんと文字が使えていたのなら、単純にSQLの結果からJavaのStringを作る際に、落ちているだけじゃないかと思ったのですが…。

>上記が何を意味しているのか判りません。
あ、すみません。大した意味で書いたのではないです。
文字列から文字コードを1つずつ拾っていって、対応するコードに置き換えた文字列を作る、というだけです。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-06-09 15:26
引用:

mioさんの書き込み (2006-06-07 19:38) より:

>単一のコードに変換してしまう
うーん…。オフコン側でちゃんと文字が使えていたのなら、単純にSQLの結果からJavaのStringを作る際に、落ちているだけじゃないかと思ったのですが…。


いえいえ、これはスレ主さんから明示されている訳ではないので本当に単一のコードかどうかはわからないのです。

引用:

mioさんの書き込み (2006-06-07 19:38) より:

文字列から文字コードを1つずつ拾っていって、対応するコードに置き換えた文字列を作る、というだけです。


一定の変換式によって文字化けが生じるのなら、この方法はアリだと思います。
MIRU
常連さん
会議室デビュー日: 2006/05/30
投稿数: 21
投稿日時: 2006-06-09 19:23
丸一日以上放置してしまい、申し訳ありませんでした。

>単一のコードに変換してしまう
SQLの結果をDataSetに落としているのですが、オフコン側が結果を受け渡すときに
対応されていない文字はすべて 〓 で受け渡しているようで、Windows側が
対応して文字コードを 〓 と表示している訳ではいないようでした。
R・田中一郎さんのおっしゃるようにバイナリデータを受け取ろうとしてみましたが
私の知識が足りず挫折してしまいました。

結局、鰍竍汲ニいった文字列が含まれている得意先のCDは判っていますから、
予めそのCDのみはサーバ側に所持していて、そのコードが呼ばれたら
string = string.Replace("〓"c, ""c)
で変換を行なうような作りにしました。
まったくもって、サーバ管理者泣かせ(理由 オフコンのマスタを追加すると
パソコン側も変更を行なわなければならない)ではありますが、
この方法で一様は行こうと思います。

最後のオフコン側をいじる方法ですが、オフコンサーバが
車で片道3時間以上の距離にあるため、気軽に試せない状態です。

mioさん、R・田中一郎さん、ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-09 23:27
とっても危ないと思うのは、

オフコン側と PC 側で使われている文字コードを、正しく把握していないのでは?

と、思えるところです。

「〓」って、なぜバイナリ値を出さない?
9339 って、JIS コードですよね?いいの?(ただの例、とも思うけど、一応)

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