実行環境

79. 英小文字を入力するには CCSID 5035

誤った使い方として CCSID 5026 環境では、正しい英小文字を入力することはできない。
5250 エミュレータで確かに英小文字を入力して、表示することができているって ?
そのように見えるかも知れないが、それは5026 環境の中だけで英小文字に見えているだけで
基本的には、それは正しい英小文字ではなく誤りである。
CCSID を正しく理解されない、最も多い誤りのひとつであるが、ここではそのことを
実際にHEXコードを調べて証明してみよう。

CCSID 5026環境 + 930 日本語英数カナ で入力したデータ・ベースのダンプ・リストが
次のとおりである。

BUMON5026 : CCSID = 5026 のデータ・ベース ( JOBCCSID 5026 での表示 )

  0001アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ
  FFFF8888888888888899999999999999AA
  0001123456789ACDEF0123456789ADEF23
                                  
  0002abcdefghijklmnopqrstuvwxyz    
  FFFF666666667777777789ABBBBBBB4444
  00022345678912345678BBB34567890000

次に CCSID 5035環境 + 939 日本語英数小文字拡張 で入力したデータ・ベースのダンプ・リストが
次のとおりである。

BUMON5035: CCSID = 5035 のデータ・ベース ( JOBCCSID 5026 での表示 )

  0001アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ
  FFFF566666666777777777888888999999
  0001923456789012345678ABCDEFABCDEF
                                  
  0002abcdefghijklmnopqrstuvwxyz    
  FFFF888888888999999999AAAAAAAA4444
  0002123456789123456789234567890000

この2つのデータ・ベースのダンプを比較してみると
同じように見た目は アイウエオ .... や abcdefg ... と表示されているものの
内部の HEX コードは異なっていることがわかる。
また CCSID 5026 のデータ・ベースを JOBCCSID = 5035 の環境下で表示させてみると

BUMON5026: CCSID = 5026 のデータ・ベース ( JOBCCSID 5035 での表示 )

  0001abcdefghiテナニヌネ jklmnopqrノフヘホst 
  FFFF8888888888888899999999999999AA 
  0001123456789ACDEF0123456789ADEF23 
                                   
  0002イウエオカキクケサシスセソタチツトハミヤユヨラリルレ     
  FFFF666666667777777789ABBBBBBB4444 
  00022345678912345678BBB34567890000

また CCSID 5035 のデータ・ベースを JOBCCSID = 5035 の環境下で表示させてみると

BUMON5035: CCSID = 5035 のデータ・ベース ( JOBCCSID 5026 での表示 )

  0001 abcdefgh[ijklmnopコqサシスセノr ハヒフ   
  FFFF566666666777777777888888999999   
  0001923456789012345678ABCDEFABCDEF   
                                     
  0002アイウエオカキクケタチツテトナニヌネヘホマミムメモヤ       
  FFFF888888888999999999AAAAAAAA4444   
  0002123456789123456789234567890000    

となる。つまり HEX コードは当然、どのような環境下においても一定の値であるが
表示される値は 英小文字中に半角カナが入り混じるようになってしまい
誤った表示になっていることがわかる。
ただし JOBCCSID 5026 で Ctl+F3キーを押して CCSID = 5035 のデータ・ベースを
表示すると

BUMON5035:

  0001アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ 
  FFFF566666666777777777888888999999 
  0001923456789012345678ABCDEFABCDEF 
                                   
  0002abcdefghijklmnopqrstuvwxyz     
  FFFF888888888999999999AAAAAAAA4444 
  0002123456789123456789234567890000 

のようにして 5035 のデータ・ベースを正しく表示することができる。
つまり Ctrl + F3キーによる操作は表示だけを一次変更しているのである。
しかし当然、 DSPJOB で調べてみても JOBCCSID は 5026 のままである。
ある大手特約店の SE は 「Ctrl + F3キーを押すと CCSID が 5035 に変更される、と
習いました」と告げたことがあったが キー・ボード操作によって JOBの CCSID が
簡単に変わったら大変なことである。
このように大手特約店のSEでも CCSID に対する理解は非常に浅い。
さて正しい英小文字はどちらであろうか ?
それには英語環境 CCSID = 37 で、実際に入力してみたデータ・ベース : BUMON37 を
表示してみるとわかる。

BUMON37: CCSID = 37 のデータ・ベース ( JOBCCSID 37 での表示 )

  0002abcdefghijklmnopqrstuvwxyz    
  FFFF888888888999999999AAAAAAAA4444
  0002123456789123456789234567890000

これでおわかりのように正しい英小文字は a = 0x81 であることがわかる。
つまり

CCSID : 5035 環境で ホスト・コードページ 939 で
入力された英小文字が正しい英小文字である。

ことが証明されたのである。
確かに CCSID 5026 環境でも英小文字は入力/表示することはできるのだが
それはあくまでも閉じられた 5026 環境の中だけで、英小文字として
表現されるだけであって、他の環境との互換性はないことがこれでわかる。
例えば 入力された英小文字を ASCII や Unicode に変換しようとするなら
元の英小文字は CCSID 5035 環境において入力されたものでなくてはならない。
逆に

半角カナ文字も他の CCSID と互換性のとれる正しい半角カナを作成するには
CCSID 5026 で作成されなければならない。

ことがわかる。
これが一般的に言われる、

半角カナ優先には 5026, 英小文字優先には 5035 が必要である。

といわれる由縁である。
時間はかかったがご理解は得られたであろうか ?

5026 では正しい半角カナ・コードを入力することはできるが正しい英小文字コードを
入力することはできない。
逆に 5035 では正しい英小文字コードを入力することはできるが正しい半角カナ・コードを
入力することはできない。
正しい半角カナ・コードと正しい英小文字コードを入力することができる CCSID は
存在しない。
もし、そのようなCCSID が存在すると仮定すると 5026 と 5035 を区別して使い分ける必要も
ないし、日本語では Unicode も必要でなくなるだろう。
5026 と 5035 は、このような違いがあるので正しく使い分けすることが必要になってくるのである。

CCSID 5026 と 5035 のちがいをこのように解説した記述は IBM マニュアルやサイトのどこにも
見当たらない。
特に特約店SE 諸氏においては CCSID を真に理解している技術者はほとんどいない。

このように検証を行なって初めて CCSID の違いを明確に認識することができる。
最後にもう一度、重要なことをまとめてみると、

5026と5035の違いまとめ

ということを覚えていて欲しい。