最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

3.15.CCSIDの不思議な話(後編)

[ Previous ] [ HOME ] [ Upper ] [ Next ]


CCSIDの構成要素

文字セット or 図形文字セット (Character Set:CS) 

文字の集まりは文字セットと呼ばれ、場合によっては図形文字セットと呼ばれます。これらは、ビットパターンイメージにつけれられる、「図形文字セット・グローバル識別コード (GCSGID)」を集めたものです。

コード・ページ (Code Page:CP) 

コード点に割り当てられた文字の集まりです

コード化スキーマ (Encoding Scheme:ES) 

コード点が特定のコード・ページ内の文字に割り当てられるときに使用される規則を指定します。たとえば、EBCDICそのものも、ESになります。漢字では、0e0fによる漢字表現もESです。コード化の手段、様式、方法、...そんな意味です。

  • CHRID = CS + CP
  • CCSID = CHRID + ES = CS + CP + ES

よく目にするSBCSのCCSID

※すべてのCCSIDの一覧表は、14.29.コード化文字セット識別コード (CCSID)を見てください。

CCSID CHRID コード化スキーマ(ES) 説明
文字セット識別コード(CS) コードページ(CP)
37 697 37 1100 アメリカ、カナダ、オランダ、ポルトガル、ブラジル、ニュージーランド、オーストラリア
290 1172 290 1100 日本語カタカナ(拡張範囲)
897 1122 897 2100 日本語 PC データ(非拡張)
1027 1172 1027 1100 日本英語(拡張範囲)

よく目にする混合CCSID

CCSID SBCS
/DBCS
CHRID コード化スキーマ(ES) 説明
文字セット識別コード(CS) コードページ(CP)
930 SBCS 1172 290
拡張非拡張
1301 日本語カタカナ(拡張範囲)4370 UDC(ユーザー定義文字)
DBCS 1001 300
932 SBCS 1122 897 2300 日本語 PC データ - 混合
DBCS 370 301
939 SBCS 1172 1027 1301 日本英語(拡張範囲)4370UDC
DBCS 1001 300
942 SBCS 1172 1041 2300 日本語 PC データ - 混合
DBCS 370 301
5026 SBCS 1172 290 1301 日本語カタカナ(拡張範囲)1880 UDC
DBCS 370 300
5035 SBCS 1172 1027 1301 日本英語(拡張範囲)1880UDC
DBCS 370 300

5026と5035を比較してみると、違うのは、SBCSのCPが290か1027か、ということだけですね。SBCSも漢字も、文字コードセットは同じもので、コード化スキーマも同じです。SBCSのCPのみ違います。

また、939は、SBCSのCCSIDは5035と同じく、1027なのですが、DBCSのCCSIDが違います。文字セットが、939が1001であるのに対して、5035では、370です。漢字の文字セットが違うようです。UDC(ユーザー定義文字)が片や4370なのに、5035では1880のようです。(これって、ユーザー定義文字の数なんだろうか...?これ以上詳しいことは、分かりませんでした。)

コードページ1027について

上記したように、「CCSID5035を使う」=「コードページ1027」を使うと言うことです。このコードページ、古くからホストを担当している人には、なんだか分かりにくいものですね。

従来、日本のシステムで、EBCDICコードと呼ばれていたものは、現在はコードページは290と呼ばれています。この290(非拡張の方)の歴史はかなり古いので、変わる筈が無いと思っていましたが、インターネットの普及と、EBCDICでAS/400がそのオープンネスで、英語の小文字(たとえば、e-mailアドレスとか)を何とか、同一コードページに押し込もうとしたのが、この1027です。制定の経過は知りませんが、290のカタカナを横にずらして、37と同一の英語の小文字を、オリジナルのままの位置に入れたようです。勿論、必要が無ければ、従来の290(大昔からの日本語EBCDIC)のままでいいのですが、それでは困る場合、この1027が重要になってきます。

※下図で、着色した部分はコードが融合されたことを視覚的にわからせる目的です。正確にマッピングされた部分を表してはいません。

290非拡張
従来のおなじみの日本語版EBCDIC

37
英語版EBCDIC

codepa12s.gif (28954 バイト)

codepa3s.gif (25883 バイト)

codepa2s.gif (30874 バイト)

1027
2つのコードページを1つのページにした新しいコードページ

よく見れば分かりますが、290と1027ではカタカナや日本語の半角の記号の部分のコードが違っています。さらに、1027をよく見ると「ア」は、X'59'なのに、「イ」は、X'62'と飛んでいます。無理やり、ウムラウトなど、あまりなじみの無い文字にカタカナをマッピングしたみたいです。まあ、なんにしろ、1枚のコードページで、英語の小文字もカタカナも入っていますね。

文字と、それに結びつく290と1027のコード点(16進数コード)の比較表

ある文字が、各々のコードページで、どのコード点にマップされているか、ごく一部を取りだして見てみましょう。

※コード点は、各図形文字に割り当てられた 16 進値です。大文字英語や、数字は同じコード点です。特に通貨記号に注意しましょう。

文字 290
コード点
1027
コード点
81 59
82 62
83 63
84 64
85 65
86 66
87 67
88 68
89 69
8A 70
... ... ...
\ 5B B2
$ E0 5B

コード点と、それに結びついている290と1027の文字比較表

今度は切り口を変えてみましょう。あるコード点が、どの文字をあらわしているか、見てみましょう。

コード点
16進数
290
文字
1027
文字
81 a
82 b
83 c
84 d
85 e
86 f
87 g
88 h
89 i
8A
... ... ...
5B \ $
E0 $
B2 \

※SEUでRPGのタグ名に \ など使うと、5035では、エラーになってしまいます。そのかわり、 $ はokです。まとめると、

CCSID 正常 エラー
5026 \ $
5035 $ \

正常なのは、コード点で、x'5B'の場合ですね。SEU内部では、エラー検査が固定情報で行われているのでしょうか?したがって、タグ名やサブルーチン名に通貨記号を入れないほうがいいでしょう。

変換テーブル

変換テーブルは、QUSRSYSにありますね。WRKTBL *ALLを実行してみると、たくさんの変換テーブルが出てきます。CCSIDはこの変換テーブルを使っています。関数でコード点の変換はいくら何でも無理でしょう。

※これらは、SBCSの変換テ-ブルみです。DBCSの変換テ-ブルは、どうやら見ることはできないようです。

                                テーブルの処理                                  
                                                                                
 オプションを入力して,実行キーを押してください。                               
   1= 作成   3= コピー   4= 削除   5= 表示   7= 名前の変更   13= 記述の変更     
                                                                                
 OPT  テーブル       ライブラリー      テキスト                                         
                                                                                
      QA3TA6G897  QUSRSYS     CHRID(*N 1027) TO CHRID(1122 897) TRANSLATE TABLE 
      QA3TA7UA38  QUSRSYS     CHRID(*N 1027) TO CHRID(1172 1041) TRANSLATE TABL 
      QA3TA7U290  QUSRSYS     CHRID(*N 1027) TO CHRID(1172 290) TRANSLATE TABLE 
      QA3T697037  QUSRSYS     CHRID(*N 1027) TO CHRID(697 037) TRANSLATE TABLE  
      QA3T697500  QUSRSYS     CHRID(*N 1027) TO CHRID(697 500) TRANSLATE TABLE  
      QA33A93A3Q  QUSRSYS     CHRID(*N 1036) TO CHRID(1252 1024) TRANSLATE TABL 
      QA38A51850  QUSRSYS     CHRID (*N 1041) TO CHRID(1106 850) TRANSLATE TABL 
      QA38A7UA3T  QUSRSYS     CHRID(*N 1041) TO CHRID(1172 1027) TRANSLATE TABL 
      QA38A7U290  QUSRSYS     CHRID(*N 1041) TO CHRID(1172 290) TRANSLATE TABLE 
      QA5IA7V833  QUSRSYS     CHRID(*N 1088) TO CHRID(1173 833) TRANSLATE TABLE 
      QA5KA7U290  QUSRSYS     CHRID(*N 1090) から CHRID(1172 290)               
                                                                       続く ... 
 オプション 1, 3, 7, 13 のパラメーターまたはコマンド                            
 ===>                                                                           
 F3= 終了   F4=プロンプト   F5= 最新表示   F9=コマンド の複写   F11= 名前のみの表示   
 F12= 取消し   F16= 位置指定の繰返し    F17= 位置指定     F24= キーの続き       
                                                                                

ここで、QA3TA7U290(CP1027からCP290へ)の中身を見てみると、

                              変換テーブルの表示                                
                                                                                
 テーブル :   QA3TA7U290     ライブラリー :   QUSRSYS                           
                                                                                
 16  進数  16  進数         16  進数  16  進数         16  進数  16  進数       
   入力      出力             入力      出力             入力      出力         
    59        81               68        88               77        92          
    5A        5A               69        89               78        93          
    5B        E0               6A        59               79        79          
    5C        5C               6B        6B               7A        7A          
    5D        5D               6C        6C               7B        7B          
    5E        5E               6D        6D               7C        7C          
    5F        5F               6E        6E               7D        7D          
    60        60               6F        6F               7E        7E          
    61        61               70        8A               7F        7F          
    62        82               71        8C               80        6A          
    63        83               72        8D               81        62          
    64        84               73        8E               82        63          
    65        85               74        8F               83        64          
    66        86               75        90               84        65          
    67        87               76        91               85        66          
                                                                       続く ... 
 F3= 終了   F12= 取消し   F17= 位置指定                                         
                                                                                

コード点の変換でカタカナの部分の変換がどうなっているか、分かりますね。

この中で、英語の小文字の、81以降が、62になっていますね。これは、290の拡張版の英語の小文字へ変換しています。困るなぁ。なんで、290が2つ(拡張と非拡張)あるんでしょう????英語の大文字にしてくれればいいのに。

※CCSIDに関係する(メッセージやセカンドレベルメッセージにCCSIDを含む)メッセージIDの一覧は、ccsidmsg.txt、です。何かの参考にしてください。

豆知識

65535の意義

CCSIDが、後からできた機能なので、その機能が無いころとの互換性保証、または、機能が無い状態をあらわすため、に作られたコードです。65535と言う数字は、多分、216 = 28×28 =  256 × 256  = 65,536 に由来するものでしょう。何も考えず、CCSIDの無いバージョンのOSから、ただバージョンアップすると、65535になります。また、未確認ですが、新規に日本で購入したマシンでは、初期値が、5026になっているようです。コードページ290をもつCCSIDが5026なので、間違いではないのですが、日本IBMとしては5035の使用を強く推薦しているようです。はやく、日本のIBM系のデファクトスタンダードのCCSIDを5035にしたいようです。(気持ちはわかるのですが...)

CPYFのFMTOPT(*MAP)で変換

*MAP が指定されていて,取出しファイル・フィールドの CCSID および受入 れファイル・フィールドの CCSID の間に正しい変換が定義されている場合 には,文字データは受入れファイル・フィールドの CCSID に変換されま す。しかし,取出しファイル・フィールドの CCSID または受入れファイ ル・フィールドの CCSID のいずれかが 65535 である場合には,文字データ は変換されません。 

5026のファイルから5035へ、変換したい場合、CPYFでできますが、FMTOPTは、*NOCHKではなく、*MAPで実行しないと、変換されません。注意してください。

混合CCSID

もし、フィールドに漢字属性(DBCS属性)を含まないファイルを、作成すると、5026の環境では、CCSIDは290になり、5035ではCCSIDは1027になります。これは、CCSID5035が、混合CCSID(SBCS+DBCS)を意味しているため、DBCSを含まない場合は、1027のみのコードページ(CCSIDも1027)になるためです。まあ、SBCSのCPを5035と同じにしたいだけなら、1027でも同じです。

2000-12-31


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送