Handling differences in ASCII SBCS and EBCDIC SBCS characters

To avoid problems with the different data representation between ASCII and EBCDIC characters, use the CHAR(EBCDIC) compiler option.

About this task

COBOL for Linux® on x86 uses the ASCII character set, and Enterprise COBOL for z/OS® uses the EBCDIC character set. Therefore, most characters have a different hexadecimal value, as shown in the following table.

Table 1. ASCII characters contrasted with EBCDIC
Character Hexadecimal value if ASCII Hexadecimal value if EBCDIC
'0' through '9' X'30' through X'39' X'F0' through X'F9'
'a' X'61' X'81'
'A' X'41' X'C1'
blank X'20' X'40'

Also, code that depends on the EBCDIC hexadecimal values of character data probably fails when the character data has ASCII values, as shown in the following table.

Table 2. ASCII comparisons contrasted with EBCDIC
Comparison Evaluation if ASCII Evaluation if EBCDIC
'a' < 'A' False True
'A' < '1' False True
x >= '0' If true, does not indicate whether x is a digit If true, x is probably a digit
x = X'40' Does not test whether x is a blank Tests whether x is a blank

Because of these differences, the results of sorting character strings are different between EBCDIC and ASCII. For many programs, these differences have no effect, but you should be aware of potential logic errors if your program depends on the exact sequence in which some character strings are sorted. If your program depends on the EBCDIC collating sequence and you are porting it to the workstation, you can obtain the EBCDIC collating sequence by using PROGRAM COLLATING SEQUENCE IS EBCDIC or the COLLSEQ(EBCDIC) compiler option.

Related references  
CHAR  
COLLSEQ