EBCDIC

EBCDICエンコーディングファミリー
分類8ビット基本ラテンエンコーディング(非ASCII)
前身BCD

拡張2進化10進コード[ 1 ] [ 2 ]EBCDIC ; [ 1 ] / ˈɛ b s ɪ d ɪ k /は、主にIBMメインフレームおよびIBMミッドレンジコンピュータのオペレーティングシステムで使用される8ビットの文字エンコーディングです。これは、パンチカードで使用されていたコードと、 1950年代後半から1960年代初頭のIBMのコンピュータ周辺機器のほとんどで使用されていた対応する6ビットの2進化10進コードから派生したものです。 [ 3 ]富士通シーメンスBS2000/OSD、OS-IV、MSP、MSP-EX、SDS SigmaシリーズUnisys VS/9、Unisys MCPICL VMEなど、IBM以外の さまざまなプラットフォームでサポートされています

歴史

1964年EBCDIC文字セットのホレリス符号化方式でパンチされたカード。上部のコントラストが強調され、印刷された文字がはっきりと見えます。「数字」(0~9)のパンチはEBCDICの下位4ビットに直接変換されますが、EBCDICの上位4ビットはより複雑です

EBCDICは1963年と1964年にIBMによって考案され、メインフレームコンピュータのIBM System/360シリーズの発売と同時に発表されました。これは7ビットのASCIIエンコード方式とは別に開発された8ビットの文字エンコード方式です。既存の2進化10進数(BCD)交換コード(BCDIC )を拡張するために作られました。BCDIC自体はパンチカードの2つのゾーン番号のパンチを6ビットにエンコードする効率的な手段として考案されました。「s」と「S」(位置1ではなく2を使用)の明確なエンコード方式は、物理的なカードの整合性を確保するためにパンチ穴が互いに近すぎないようにすることが望ましいパンチカードから引き継がれました。[ 4 ]

IBMはASCII標準化委員会の主な提唱者であったが[ 5 ] 、 System/360コンピュータにASCII周辺機器(カードパンチマシンなど)を同梱する時間がなかったため、EBCDICを採用した。[ 3 ] System/360はRCA Spectra 70ICL System 4 、富士通FACOMなどのクローン製品とともに大成功を収め、EBCDICも同様に成功した。

IBMのメインフレーム・オペレーティング・システムミッドレンジ・コンピュータ向けのIBM iオペレーティング・システムはすべて、EBCDICを固有のエンコード方式として使用しています[ 6 ](ASCIIに対する許容度があり、たとえばz/OSISPFはEBCDICとASCIIの両方でエンコードされたファイルを参照および編集できます)。ソフトウェアはエンコード間の変換が可能で、最近のメインフレーム(IBM Zなど)には、文字セット間の変換を高速化するためのプロセッサ命令がハードウェア・レベルで組み込まれています。IBM ZメインフレームのC言語およびC++言語用の最近のz/OSコンパイラ、およびIBM System/390メインフレームの初期のOS/390 CおよびC++コンパイラは、デフォルトでASCIIを使用するPOSIX互換の実行環境をサポートしています。[ 7 ]

IBM ハードウェア上で実行されるすべてのオペレーティング システムが EBCDIC を使用するわけではありません。IBM AIXLinux on IBM ZLinux on Power はすべて ASCII を使用し、 IBM パーソナル コンピューターおよびその後継機上で実行されるすべてのオペレーティング システムも同様です。

ASCIIとの互換性

ASCII と EBCDIC の両方で動作するソフトウェアを作成するには、多くの困難がありました。

  • 文字間のギャップにより、ASCIIでは動作する単純なコードがEBCDICでは動作しなくなります。例えば、ASCIIではAからZまでのアルファベットが出力されますが、EBCDICでは41文字(未割り当ての文字も含む)が出力されます。for(c='A';c<='Z';++c)putchar(c);
  • EBCDIC のソートでは、ASCII と正反対に、小文字が大文字の前に、文字が数字の前に配置されます。
  • ASCII用に設計されたほとんどのプログラミング言語、ファイル形式、ネットワークプロトコルでは、EBCDICには存在しない句読点(キャレット^、チルダ~、角括弧、中括弧{}など)が使用されていたため、EBCDICシステムへの変換が困難でした。回避策として、トリグラフが使用されました。[ 8 ]逆に、EBCDICにはIBMシステムで使用されていた¬論理否定や¢米セント)などの文字があり、ASCIIに変換できませんでした。論理否定文字はPL/Iプログラミング言語や、その他のIBM言語で使用されています。
  • EBCDIC 文字 NL (次の行) は ASCII LF として処理するのが最適でしたが、EBCDIC には LF と呼ばれる文字も含まれているため、常に一貫して処理されるとは限りませんでした。
  • 7ビットASCIIが使用された場合、8ビットバイトには「未使用」の上位ビットが存在し、多くのソフトウェアはそこに他の情報を格納していました。ソフトウェアはまた、5つの7ビットASCII文字を36ビットワードにパックするなど、7ビットをパックし、8番目のビットを破棄していました。[ 9 ] PDP-11では、上位ビットがセットされたバイトは負の数として扱われ、この動作はC言語にもコピーされ、上位ビットがセットされている場合に予期しない問題が発生しました。これらすべてが、ASCIIから8ビットEBCDICへの移行を困難にしました(また、8ビット拡張ASCIIエンコーディングへの移行も困難でした)。

コードページレイアウト

オリジナルのEBCDIC文字エンコーディングに基づいたEBCDICコードページは数百種類存在します。また、世界各地での使用を目的とした多様なEBCDICコードページも存在し、中国語、日本語(EBCDIC 930、JEF、KEISなど)、韓国語、ギリシャ語(EBCDIC 875)といった非ラテン文字系のコードページも含まれています。さらに、明確な理由もなく文字が入れ替わっているバリエーションも数多く存在します。

以下の表はEBCDICの「不変サブセット」 [ 10 ]を示している。これはラテンアルファベットを使用するすべてのEBCDICコードページで同じ割り当てを持つべき文字である。(これには感嘆符を除くISO/IEC 646不変レパートリーのほとんどが含まれるまた、コードページ37(EBCDICのコードページバリアントの1つ)のどこにあるのかを示す、欠落しているASCIIおよびEBCDICの句読点(灰色で表示)も示されている。空白セルにはバリアント内の地域固有の文字が埋め込まれているが、灰色の文字もしばしば入れ替えられたり置き換えられたりする。ASCIIと同様に、不変サブセットは英語などのISO基本ラテンアルファベットのみを使用する言語でのみ機能する。

EBCDIC
0 1 2 3 4 5 6 7 8 9 A B C D E F
0x ヌルソーストエックス選択ホットRNLデルGESPSRPTVTFFCRSOSI
1x DLEDC1DC2DC3RES/ ENPNLBSPOCCANEMUBSCU1IFSIGSIRSIUS / ITB
2倍 DSSOSFSWUSBYP/ INPLFETBESCSASFESM/ SWCSPMFAENQACKBEL
3倍 シンIRPPTRNNBSEOTSBSITRFFCU3DC4NAKサブ
4倍 SPセント<|
5倍 *);¬
6倍 -/¦%_
7回 `#@'"
8倍 abcdefghi±
9倍 jklmnopqr
~stuvwxyz
Bx ^[]
Cx {ABCDEFGHI
Dx }JKLMNOPQR
\STUVWXYZ
Fx 0123456789EO

非ASCII EBCDIC制御文字の定義

以下は、 ASCII制御文字にマッピングされない、または追加の用途を持つEBCDIC制御文字の定義です。Unicodeにマッピングされる場合、これらはIBMの文字データ表現アーキテクチャ(CDRA)で規定された方法に従って、主にC1制御文字コードポイントにマッピングされます。[ 11 ] [ 12 ]

改行 (NL) のデフォルトのマッピングは ISO/IEC 6429 の次行文字 (NEL、U+0085、その動作は Unicode 付録 14 にも規定されているが必須ではない) に対応しているが、[ 13 ]これらの C1 にマッピングされた制御のほとんどはISO/IEC 6429 C1 セットの制御にも、 ISO 6630などの他の登録済み C1 制御セットの制御にも一致しない。[ 14 ]これにより、非 ASCII EBCDIC 制御が実質的には一意の C1 制御セットになるが、それらはISO-IRレジストリに登録されている C1 制御セットには含まれていない。[ 15 ]つまり、それらには割り当てられた制御セット指定シーケンスがない ( ISO/IEC 2022で規定され、ISO/IEC 10646 (Unicode) でオプションで許可されている)。[ 16 ]

U+0085(次の行)を除いて、Unicode標準はC1制御文字の解釈を規定しておらず、その解釈は上位レベルのプロトコルに委ねられています(他の目的で使用されていない場合、ISO / IEC 6429の解釈を提案しますが、必須ではありません)[ 17 ] 。したがって、このマッピングはUnicodeで許可されていますが、指定されていません。

記憶法EBCDICCDRAペアリング[ 11 ] [ 12 ]名前説明[ 18 ]
選択04009C選択1バイトのパラメータを取るデバイス制御文字
PFパンチオフこの場所はGOST 19768-93により登録されています。[ 19 ]
RNL060086改行必須改行リセット、インデント、タブモード
LC小文字この場所はGOST 19768-93により登録されています。[ 19 ]
GE080097グラフィックエスケープ次の文字の解釈を変更する非ロックシフト(コードページ310などを参照)。ISO/IEC 6429のSS2(008E) と比較してください
SPS09008D上付き文字上付き文字を開始または下付き文字を元に戻す。ISO/IEC 6429のPLU (008C) と比較してください
RPT0A008E繰り返しプリントバッファを繰り返す動作モードに切り替えます
SMM手動メッセージの開始この場所はGOST 19768-93により登録されています。[ 19 ]
RES/ENP14009D復元、プレゼンテーションを有効にする出力を再開する( BYP/INP後)
NL150085 (000A)改行改行。デフォルトのマッピング(0085)はISO/IEC 6429のNELと一致します。UNIXの改行規則に従って、マッピングは改行(EBCDIC 0x25)と入れ替わる場合があります。[ 11 ]
POC170087プログラムオペレータ通信特定の機能(例:ライトやファンクションキー)を識別する2つの1バイトオペレータが続きます。ISO/IEC 6429のCSI(009B)、OSC(009D)、APC(009F) とは対照的です
ILアイドルこの場所はGOST 19768-93により登録されています。[ 19 ]
UBS1A0092ユニットバックスペース小数点以下のバックスペース。
CCカーソル制御この場所はGOST 19768-93により登録されています。[ 19 ]
CU11B008Fお客様用IBMでは使用しません。お客様用です
IUS/ITB1F001Fインターチェンジユニットセパレーター、中間伝送ブロック「ユニット」と呼ばれるブロックを終了するための情報区切り文字として使用されるか(ASCII の場合、 IRも参照)、中間ブロックの終了を区切るための伝送制御コードとして使用されます。
DS200080桁選択S/360 CPU編集(ED)命令で使用
SOS210081意味の開始S/360 CPU編集(ED)命令で使用されます。(注:ISO/IEC 6429のSOSとは異なります。区別が必要な場合、IBMでは意味の開始を(ドット付き)と、文字列の開始をと略しますが、それ以外は同じ略語です。)[ 20 ]SOS.SOS
FS、[ 18 ] FDS [ 19 ]220082フィールドセパレータS/360 CPU編集(ED)命令で使用されます。(注:(交換)ファイルセパレータは、ASCIIではFSと略され、0x1Cにあり、IFSと略されます。)[ 18 ]
WUS230083単語下線直前の単語に下線を引いています。ISO/IEC 6429のSGRとは対照的です
BYP/INP240084バイパス、抑制提示出力を非アクティブにします。つまり、次のRES/ENPまで、伝送制御コードと RES/ENP 以外のすべてのグラフィカル文字と制御文字を無視します。
SA280088属性設定固定長のデバイス固有の制御シーケンスの開始を示します。CSPの使用を推奨し ます
SFE290089拡張開始フィールド可変長のデバイス固有の制御シーケンスの開始を示します。CSPの使用を推奨し ます
SM/SW2A008Aモード設定、スイッチバッファスイッチなどの動作モードを設定するデバイス固有の制御
CU22B008B顧客用2これは、 GOST 19768-93などの一部の仕様に記載されています。[ 19 ] EBCDIC制御コードの新しいIBM仕様では、CU1とCU3のみが顧客用としてリストされており、この位置はCSPに使用されます。[ 18 ]
CSP制御シーケンスプレフィックス可変長のデバイス固有の制御シーケンスの開始を示します。制御機能のカテゴリを指定するクラスバイト、シーケンス長を示すカウントバイト(カウントバイトとタイプバイトを含むが、クラスバイトまたは最初のCSPは含まない)、そのカテゴリ内の制御機能を識別するタイプバイト、および0個以上のパラメータバイトが続きます。ISO/IEC 6429のDCS(0090)およびCSI(009B) とは対照的です
MFA2C008Cフィールド属性の変更可変長のデバイス固有の制御シーケンスの開始を示します。CSPの使用を推奨し ます
300090(予約済み)IBMによる将来の使用のために予約済み
310091(予約済み)IBMによる将来の使用のために予約済み
IR330093インデックスリターン次の行の先頭に移動する(NLも参照)、または情報単位を終了する(IUS/ITBも参照)。
PP340094表示位置現在の位置を設定するための2つの1バイトパラメータ(1番目は機能、2番目は列または行の番号)が続きます。ISO/IEC 6429のCUPおよびHVPとは対照的です
PNパンチオンこの場所はGOST 19768-93により登録されています。[ 19 ]
TRN350095透過続く透過データのバイト数を示す1バイトのパラメータが続きます
RSTリーダー停止この場所はGOST 19768-93により登録されています。[ 19 ]
NBS360096数字バックスペース1桁分前に戻ります。
UC大文字この場所はGOST 19768-93により登録されています。[ 19 ]
SBS380098下付き文字下付き文字を開始するか、上付き文字を元に戻す。ISO/IEC 6429のPLD (008B) と比較してください
IT390099インデントタブRNLまたはRFFに達する まで、現在の行と後続のすべての行をインデントします
RFF3A009A必須フォームフィード改ページ、インデント、タブモードの リセット
CU33B009Bお客様用3IBMでは使用しません。お客様用です
3E009E(予約済み)IBMによる将来の使用のために予約済み
EOFF009F8つの1フィラーとして使用されるすべての1文字

Latin-1文字セットのコードページ

以下のコードページは、Latin-1文字セット(ISO/IEC 8859-1)を完全に網羅しています。最初の列は元のコードページ番号を示します。2番目の列は、ユニバーサル通貨記号(¤)をユーロ記号(€)に置き換えたコードページ番号(EBCDIC 924の場合は、ISO 8859-15に準拠するようにセットが変更されたコードページ番号) を示します。

国によってコードページが異なるのは、これらのコードページが当初は各国固有の文字レパートリーを持つコードページとして開発され、後にISO 8859-1レパートリー全体を含むように拡張されたためです。つまり、特定のISO 8859-1文字は、コードページによってコードポイント値が異なる場合があります。これらは国別拡張コードページCECP)と呼ばれます。 [ 21 ]

CCSIDユーロアップデート
0371140オーストラリア、ブラジル、カナダ、ニュージーランド、ポルトガル、南アフリカ、アメリカ合衆国
2731141オーストリア、ドイツ
2771142デンマーク、ノルウェー
2781143フィンランド、スウェーデン
2801144イタリア
2841145ラテンアメリカ、スペイン
2851146アイルランド、イギリス
2971147フランス
5001148国際線
8711149アイスランド
1047924オープンシステム(MVS Cコンパイラ)

批評とユーモア

オープンソースソフトウェアの提唱者でありソフトウェア開発者でもあるエリック・S・レイモンドは、著書『ジャーゴン・ファイル』の中で、EBCDICはハッカー(彼が言うところの熱狂的なプログラマーのサブカルチャーに属する人々)に嫌われていたと記している[ 22 ] 。今日ではベンダーロックインとして知られている現象は、『ジャーゴン・ファイル』の中で次のように冗談めかして批判されている[ 23 ] 。 [ 24 ]

EBCDIC: /eb´s@·dik/, /eb´see`dik/, /eb´k@·dik/, n. [略語、Extended Binary Coded Decimal Interchange Code] IBM の恐竜で使用されていたとされる文字セット。少なくとも 6 つの互換性のないバージョンが存在し、すべてのバージョンに、不連続な文字シーケンスや、現代のコンピュータ言語で非常に重要ないくつかの ASCII 句読点文字がないなどの利点があります (正確にどの文字がないかは、どのバージョンの EBCDIC を見ているかによって異なります)。IBM は 1960 年代初頭にパンチカード コードから EBCDIC を採用し、顧客管理の戦術として普及させ (コネクタの陰謀を参照)、すでに確立されていた ASCII 標準を無視しました。現在、IBM はオープン システム企業であると主張していますが、EBCDIC の変種に関する IBM 独自の説明とそれらの変換方法は、依然として社内で極秘とされており、読む前に燃やしてください。ハッカーたちは EBCDIC という名前を聞いただけで青ざめ、それを純粋な悪の現れだと考えています。

EBCDICの設計は多くのジョークの源となった。例えば、 4.3BSD Reno (1990) [ 25 ]のUnixフォーチュンファイルに次のようなジョークがあった。

教授:「それで、アメリカ政府は暗号化規格を策定するために IBM に相談し、IBM が考案したのが…」学生:「EBCDIC です!」

EBCDIC文字セットへの言及は、1979年のコンピュータゲームシリーズ『ゾーク』で見られます。 『ゾークII』の「マシンルーム」では、EBCDICは理解不能な言語を暗示するために使用されています。

ここは、様々な重機が轟音を立ててうなり声を上げながら立ち並ぶ広い部屋だ。部屋からは焼けた抵抗器の臭いが漂っている。壁一面に、丸、三角、四角のボタンが3つ並んでいる。当然ながら、これらのボタンの上にはEBCDICで書かれた説明書が…

2021年、ベルギーのある銀行が2019年当時も社内でEBCDICを使用していたことが公表されました。ある顧客は、自分の姓の正しい綴りにはウムラウトが含まれているにもかかわらず、銀行はそれを省略していたと主張し、一般データ保護規則(GDPR)で保障されている「不正確な個人データの適時訂正」の権利を理由に苦情を申し立てました。銀行側の主張には、システムがEBCDICを使用していたこと、そして分音記号付きの文字(あるいは小文字)をサポートしていなかったことが含まれていました。控訴裁判所は顧客側に有利な判決を下しました。[ 26 ] [ 27 ]

参照

参考文献

  1. ^ a b Mackenzie, Charles E. (1980). Coded Character Sets, History and Development (PDF) . The Systems Programming Series (1 ed.). Addison-Wesley Publishing Company, Inc. ISBN 0-201-14460-3. LCCN  77-90165 . 2022年4月6日閲覧
  2. ^ドノヴァン、ジョン・J. (1972).システムプログラミング. マグロウヒル. p. 65. ISBN 0-07-085175-1
  3. ^ a b Bemer, Bob . 「EBCDICとPビット(史上最大のコンピュータの失敗) - コンピュータ史の小話」 。 2018年5月13日時点のオリジナルからのアーカイブ。 2013年7月2日閲覧…しかし、当時のプリンターとパンチはASCIIに対応しておらず、IBMは発表せざるを得なかったのです
  4. ^ 「Doug Jonesのパンチカードコード」 . homepage.cs.uiowa.edu . 2023年1月14日閲覧
  5. ^ 「X3.4-1963」 1963年4ページ。(注: 最終的な 21 人のメンバーからなる ASA X3.2 小委員会には、IBM から 4 人のスタッフが参加しました。)
  6. ^ IBMnt (2008). 「IBMはメインフレームにおけるEBCDICの使用をデフォルトの慣行として確認」オリジナルから2013年1月3日アーカイブ2008年6月16日閲覧。
  7. ^ 「拡張ASCII」 . z/OS UNIX System Services 計画. 2024年8月28日.
  8. ^ 「国際標準 – プログラミング言語 – C の根拠」(PDF)。改訂5.10。2003年4月。§ MSE.4: 不変ISO/IEC 646のサポート。2016年6月6日時点のオリジナルからアーカイブ(PDF) 。2022年11月24日閲覧
  9. ^ PDP-10リファレンスハンドブック、第2巻:ソースプログラムのアセンブル(PDF)。Digital Equipment Corporation。p.221
  10. ^ 「不変文字セット」 IBM Knowledge Center . 2018年8月14日.
  11. ^ a b c Umamaheswaran, VS (1999-11-08). 「3.3 ステップ2:バイト変換」 . UTF-EBCDIC . Unicode Consortium . Unicode Technical Report #16. 64個の制御文字(ASCII DELETE文字(U+007F)を含む)は、IBM Character Data Representation Architecture(CDRA)で定義されているEBCDIC規則に従ってマッピングされます。ただし、EBCDICの改行制御文字と改行制御文字の組み合わせが、CDRAのデフォルトの組み合わせからISO/IEC 6429の改行制御文字(U+000A)と次行制御文字(U+0085)に置き換えられます。
  12. ^ a b Steele, Shawn (1996-04-24). 「cp037_IBMUSCanadaからUnicodeへのテーブル」 Microsoft / Unicodeコンソーシアム.
  13. ^ Heninger, Andy (2019-02-15). 「NL: 次の行 (A) (調整不可)」 . Unicode 行分割アルゴリズム. リビジョン 43. Unicode コンソーシアム. Unicode 標準付録 #14.
  14. ^ ISO/TC 46 (1986-02-01).国際規格ISO 6630に基づく書誌利用のための追加制御機能(PDF) . ITSCJ/ IPSJ . ISO-IR -124.{{citation}}: CS1 maint: 数値名: 著者リスト (リンク)
  15. ^ ISO/IEC エスケープシーケンスで使用されるコード化文字セットの国際登録簿(PDF)、ITSCJ/ IPSJ、ISO-IR、2023年5月12日のオリジナル(PDF)からアーカイブ、 2023年5月13日取得
  16. ^ ISO/IEC JTC 1/SC 2 (2017). 「12.4: 制御機能セットの識別」.情報技術 — ユニバーサルコード化文字セット (UCS) (第5版). ISO . pp.  19– 20. ISO/IEC 10646.その他のC0またはC1セットの場合、最終オクテットFは国際コード化文字セット登録簿から取得するものとする。…このようなエスケープシーケンスが、本国際規格に準拠するコード単位シーケンス内に出現する場合は、第11条に従ってパディングを行うものとする。{{citation}}: CS1 maint: 数値名: 著者リスト (リンク)
  17. ^ Unicodeコンソーシアム(2019). 「23.1: 制御コード」. Unicode標準(PDF) (12.0.0版). pp.  868– 870. ISBN 978-1-936213-22-1
  18. ^ a b c d「付録G-1. EBCDIC制御文字定義」 .文字データ表現アーキテクチャー. IBM Corporation . 2018年9月11日時点のオリジナルからのアーカイブ
  19. ^ a b c d e f g h i j GOST (1993)。「Информационная технология. Наборы 8-битных кодированных символов. Двоичный код обработки информации」 [情報技術。 8 ビットのコード化された文字セット。情報処理用のバイナリコード] (ロシア語)。 GOST 19768-93。
  20. ^ IBM . "Character Data Representation Architecture (CDRA)" . IBM . p. 327. EBCDICにおけるStart of Significance制御文字のニーモニックは、末尾にドット(.)を追加するように変更されました(SOS.)。これは、ISO-8でStart of String制御文字に使用されるSOSニーモニックと区別するためです。ドットは制御文字の特性を一切変更しません。
  21. ^ "iso8859.txt" .カーミットプロジェクト/コロンビア大学.
  22. ^レイモンド、エリック・S. (1997). 「新ハッカー辞典」 . p. 310.
  23. ^ "jarg1-81-MM-DD.txt" . Eric S. Raymondのホームページ. 1981年. 2025年10月22日閲覧
  24. ^ "EBCDIC" . Jargon File . 2018年5月13日時点のオリジナルよりアーカイブ。 2018年5月13日閲覧
  25. ^ 4.3BSD-Reno/share/games/fortune/fortunes
  26. ^ 「ブリュッセル控訴裁判所 - 2019/AR/1006 - GDPRhub
  27. ^ Eden, Terence (2021年10月25日). 「EBCDICはGDPRと互換性がない – Terence Edenのブログ」 .