ASCII SBCS 文字と EBCDIC SBCS 文字の違いの処理

ASCII 文字と EBCDIC 文字のデータ表現の違いによる問題を避けるには、CHAR(EBCDIC) コンパイラー・オプションを使用します。

COBOL for Linux® on x86 は ASCII 文字セットを使用しますが、Enterprise COBOL for z/OS® は EBCDIC 文字セットを使用します。 したがって、大半の文字が、次の表に示すように異なる 16 進値を持ちます。

表 1. ASCII 文字と EBCDIC 文字との対比
文字 ASCII の場合の 16 進値 EBCDIC の場合の 16 進値
'0' から '9' X'30' から X'39' X'F0' から X'F9'
'a' X'61' X'81'
'A' X'41' X'C1'
ブランク X'20' X'40'

また、次の表に示すように、文字データの EBCDIC 16 進値に依存するコードは、文字データが ASCII 値を持つ場合、ほとんどが失敗してしまいます。

表 2. ASCII での比較と EBCDIC での比較の対比
比較 ASCII の場合の評価 EBCDIC の場合の評価
'a' < 'A'
'A' < '1'
x >= '0' 真の場合、x が数字であるかどうかは示されない 真である場合、x はおそらく数字
x = X'40' x がブランクかどうかはテストされない x かどうかがテストされる

このような違いがあるため、文字ストリングのソート結果は EBCDIC と ASCII では異なります。 多くのプログラムでは、これらの違いによる影響はありませんが、プログラムが一部の文字ストリングの正確なソート順序に依存する場合は、論理エラーの可能性にも注意する必要があります。 EBCDIC 照合シーケンスに依存するプログラムをワークステーションに移植する場合は、PROGRAM COLLATING SEQUENCE IS EBCDIC または COLLSEQ(EBCDIC) コンパイラー・オプションを使用して、EBCDIC 照合シーケンスを取得することができます。

関連参照
CHAR  
COLLSEQ