はじめに
おはよう〇○〇〇〇君、バッタもんです
今回はメインフレーム連携の鍵となるEBCDIC系のコード、特に2バイト文字の変換について、レガシーシステム(IBMのメインフレームやオフコン)からの移行に適した、DataSpider、HULFT Square、DataMagicによる文字コード変換の差について書き残します
NタイプとMタイプの違い
コード変換(特に固定長フォーマット)において重要な役割を果たすレガシー系ファイルフォーマットの項目タイプには、2バイト文字を扱うものとして、NタイプとMタイプがあります
DataMagicのマニュアルでは、これら2つのタイプは以下のように定義されています
DataMagic 操作マニュアル(抜粋)
N(2バイト表示文字)
2バイトコード(※)のみの(シフトコードがない)文字データ形式。
1バイトコードが含まれていてはいけません。2バイトコード(※)以外の
マルチバイトコードは扱えません。
(中略)
注※ 3バイト以上で構成される文字は含まない、2バイトで1文字を表記する文字コードのことです。
M(可変長文字)
1バイトコードと2バイトコードが混在する文字データ形式です。
シフトコード(シフトイン・シフトアウト区切り文字)について
EBCDIC 2 バイト文字セット (DBCS) テキストは、1 バイト文字から 2 バイト文字への遷移を区切るために、シフトイン・シフトアウト (SOSI) バイトを使用してエンコードされます。
0x0E(Shift-Out/SO): これ以降は「2バイト(漢字)モード」の開始
0x0F(Shift-In/SI) : これ以降は「1バイト(英数カナ)モード」への復帰
文字タイプと製品・サービスの対応
2バイトコードを含む、文字タイプごとの対応状況を表にしました
| 文字タイプ | シフトコード | DataSpider | HULFT Square | DataMagic |
|---|---|---|---|---|
| M | あり | 〇 | 〇 | 〇 |
| N | なし | ✖ | ✖ | 〇 |
EBCDIC系の2バイト文字コードを変換する際は、製品・サービスがどの項目タイプ(シフトコード有無)に対応しているかを確認しましょう
Appendix
DataSpiderやHULFT Squareがサポートするエンコード
サポートするエンコードについて、DataSpiderのマニュアルに以下の記載があります
| Java SE Runtime Environment 8でサポートされているエンコードを指定する 詳細は、「Supported Encodings」 https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html を参照 |
|---|
今回のテーマに沿って「japanese」で検索すると16個見つかりますが、そのうち、以下のいずれかをDataSpiderで使用すると、EBCDICおよびIBM漢字の文字コード変換ができます
Cp930:日本語の漢字とカタカナ、4370UDCを混ぜた5026のスーパーセット
Cp939:日本語の漢字とローマ字、4370UDCを混ぜた5035のスーパーセット
Cp930は半角カナ、Cp939は英小文字も使え、どちらを使うかは、入力データによりますが、今回はCp939を使います
| Canonical Name for java.nio API | Canonical Name for java.io API and java.lang API | Alias or Aliases | Description |
|---|---|---|---|
| x-IBM930 | Cp930 | ibm-930 ibm930 930 cp930 | Japanese Katakana-Kanji mixed with 4370 UDC, superset of 5026 |
| x-IBM939 | Cp939 | ibm-939 cp939 ibm939 939 | Japanese Latin Kanji mixed with 4370 UDC, superset of 5035 |
Cp930/Cp939は、日本語文字項目にシフトコードを伴うことを前提としたコード体系で、
DataSpiderでCp930/Cp939を扱う際に、この条件が満たされていない場合、正しい文字コード変換ができません
また、IBM以外の漢字コード(富士通、日立、NECなど)はサポートしていません
DataSpiderを使ったEBCDICコードの変換手順(固定長アダプター使用)
①グローバルリソース(HULFT Squareはデータ形式リソース)の作成
固定長読み取りフォーマット定義を、固定長ウィザードで作成します
フィールドの定義は、エンコードに「Cp939」を直接入力します
②スクリプトの作成
固定長ファイル読み取りとCSVファイル書き込みのアイコンを置いて線でつなぎます
固定長ファイル読み取りのエンコードも「Cp939」を直接入力します
改行コードは「NONE」を選択します
プレビューも「Cp939」を直接入力して ▼ を押します
スクリプト実行結果(ヘダーを追加しました)
今回はCp939を使いましたが、Cp930も同じ要領で文字コード変換ができます
おわりに
最後までお読みいただき、ありがとうございます
今回は、EBCDIC系2バイトコードの変換と、DataSpiderによる文字コード変換の手順をご紹介しました
...
...
...
なお、このデータは自動的に消滅💣...しませんが、皆様の成功をお祈りします
バッタもん





