MVSシステムからJava環境に送られるデータを解釈するには、どのコードページ/文字セットを使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/818759

質問

興味深い問題に遭遇しました(レガシーシステムとのやり取りでよくあることです)。私は、さまざまなシステム(MVSシステムなど)からの要求を受信できるアプリケーション(現在x86 LinuxまたはWindowsシステムで実行されている)に取り組んでいます。

MVSシステムからの要求データを解釈するために使用するコードページ/文字セットを決定しようとしています。

過去、z / OSシステムに来るバイト日付を解釈するために「cp500」(IBM-500)を使用しましたが、MVSは少しレガシーシステムであり、IBMは使用するエンコーディング(数十のEBCDICエンコーディングが必要)に関して一貫して心を変え、cp500は正しいエンコーディングではないかもしれません。

Javaの文字セットで見つけた最高のリソースは次のとおりです。 http://mindprod.com/jgloss / encoding 。しかし、このサイトとIBM Infocentersからは、明確な答えを得ることができませんでした。

編集:以下のPaxへの応答から追加:

リクエストデータの出所に関する私の質問には、明らかな穴がありました。この場合、データの発信元はWebsphere MQインターフェースを介しています。 Websphere MQには適切なエンコードに変換する機能がありますが、それはMQMessage.readString()を使用してデータを読み取るためだけのものであり、これは非推奨です。私はこれを使用したいと思いますが、独自のインターフェイスフレームワークを使用しています。このフレームワークでは、MQQueueからメッセージを読み取る方法を変更できず、キューから直接バイトを読み取るため、翻訳を処理します。

最終回答:これについてフォローアップしたかった。正しい文字セットは確かにcp500(IBM-500)でした。ただし、結果が異なる可能性があるという印象を受けています。同じ問題を抱えている他の人へのヒント:

Charset.availableCharsets();を使用します。これにより、実行時にサポートされる文字セットのマップが提供されます。これらのセットを反復処理し、その文字セットに変換されたバイトデータを印刷しました。私が望んでいた答えは得られませんでしたが(主に、入ってくるデータを読み取ることができなかったため)、他の人に役立つと思います。

参照: http://mindprod.com/jgloss/encoding のサポートされているリスト文字セット。

最後に、これは確認していませんが、正しいJREを使用していることを確認してください。 IBMランタイムは、OpenJDKまたはSunのランタイムよりも多くのEBCDIC文字セットをサポートしていると考えています。

役に立ちましたか?

解決

" MVSはちょっとしたレガシーシステムです ''?ハ!信頼性が最大の懸念事項であるアプリケーションでは、依然としてOSが選択されています。では、質問に進んでください:-)

データを生成しているものに完全に依存します。たとえば、ホストからファイルをダウンロードするだけの場合、FTPネゴシエーションがそれを処理する場合があります。ただし、Javaについて言及しているため、おそらくJDBCを介してDB2 / zに接続しており、JDBCドライバーはそれを適切に処理します(SunバージョンではなくIBM独自のJREを使用している場合は、はるかに優れています)。

ホスト上のEBCDIC自体にはかなりの数のエンコーディングがありますので、少なくともデータの送信元をお知らせください。 DB2の最近のバージョンでは、データベースへのUnicodeの保存に関する問題はありません。これにより、懸念事項がすべて軽減されます。

最初のタスク、データの送信元を見つけて、SysProgからエンコードを取得します(自動的に処理されない場合)。

更新:

Andrew、追加されたテキストに基づいて、提供された翻訳を使用できないと述べている場合、手動の方法を使用する必要があります。データのソースを特定し、そこからCCSIDを取得する必要があります。次に、Unicode(またはUnicodeではない場合は使用しているコードページ)との間の変換を手動で行います。

CCSID 500はEBCDIC International(ユーロなし)のデフォルトコードページですが、これらのマシンは世界中で使用されています。 z / OS変換サービスは、通常メインフレームで変換を行う方法です。

これはiSeriesページですが、メインフレームにも適用可能な膨大な数のCCSIDとそのグリフがリストされています。

おそらく、CCSID 500または37(または外国語バージョンのいずれか)を使用しているかどうかを把握し、Unicode CCSID 1208でマッピングを実行する必要があります。SysProgは、どちらを使用できるかを確認できます。米国の会社で働いている場合は、おそらく500か37になりますが、IBMは複数のコードページをサポートするために多大な労力を費やしています。すべてのメインフレームソフトウェアがデフォルトでUnicodeを保存して使用するようになったとき、私はうれしくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top