EBCDIC から ANSI 文字コードへの変換

EBCDIC (Extended Binary Coded Decimal Interchange Code) は、パーソナル コンピュータ以外のすべての IBM コンピュータで使用される英字データです。EBCDIC 文字セットから ASCII へサーバー レスポンスを変換する変換ルーチンは、簡単に実装できます。

関数 EBCDIC2ASC は、EBCDIC_2_ASCII という配列によって定義されたコード マップを使用します。これは、各 EBCDIC 文字をその対応する ASCII 文字にマップするものです。関数 ASC2EBCDIC は、ASCII から EBCDIC へクライアント リクエストを変換するために必要で、同じような方法で機能します。

var 
  asEBCDIC_2_ASCII : array[256] of string(1) INIT
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", "a", "b", "c", "d", "e", "f", "g", "h", "i", " ", " ", " ", " ", " ", " ", 
" ", "j", "k", "l", "m", "n", "o", "p", "q", "r", " ", " ", " ", " ", " ", " ", 
" ", "~", "s", "t", "u", "v", "w", "x", "y", "z", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", "A", "B", "C", "D", "E", "F", "G", "H", "I", " ", " ", " ", " ", " ", " ", 
" ", "J", "K", "L", "M", "N", "O", "P", "Q", "R", " ", " ", " ", " ", " ", " ", 
" ", " ", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", " ", " ", " ", " ", " ", 
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " ", " ", " ", " ", " ", " ";  
  
function EBCDIC2ASC(pEBCDIC: string; pMaxLen: number optional)
  var 
    i: number; 
  begin 
  // 
  if pMaxLen = 0 then 
     pMaxLen := Strlen(pEBCDIC);  
  // writeln("length of string : " + string(pMaxLen));
  end; 
  //                               
  // writeln("EBCDIC STRING " + pEBCDIC);
  //
  for i := 1 to pMaxLen do 
  //   
  //writeln("Ordinal Value:" + String(ord(pEBCDIC[i])));
  //write("Value From Array:" + asASCII_2_EBCDIC[ord(pEBCDIC[i]) + 1]);
    write(asEBCDIC_2_ASCII[ord(pEBCDIC[i]) + 1]);
  //writeln;
  //
  end; 
    writeln;
  end EBCDIC2ASC;

以下の表は、2780/3780 プロトコル コード マップ ([EBCDIC_CTI] から抜粋) の標準 EBCDIC 表です。たとえば、EBCDIC バイト 0x83 をデコードするには、行 8、列 3 を選択します。0x83 は、ASCII 文字 c にマップされることがわかるでしょう。

[EBCDIC_UNI] は、UTF-EBCDIC - EBCDIC Friendly Unicode (or UCS) Transformation Format の仕様を表すリファレンスです。