コードページ437

コードページ437とは、オリジナルのIBM PC（パーソナルコンピュータ）の文字セットである。CP437やOEM-US、OEM 437、PC-8、DOS Latin USとしても知られる。32番から126番のASCIIコード、アクセント付き文字（ダイアクリティカルマーク）の拡張範囲のコード、ギリシア文字がいくつか、アイコン、線を引くための記号、これらが含まれている。「OEMフォント」や「high ASCII」、「拡張ASCII」（同様に互換性のないASCII拡張の1つ）として言及されることもある。

この文字セットはEGAおよびVGAに互換性があるグラフィックカードの初期フォントとして残っている。PCが再起動してフォントが記録媒体から読み込まれる前に表示されるテキストは一般的にこの文字セットで描画される。IBM PCの時代に開発された多くのファイルフォーマットもまたコードページ437がもとになっている。

ディスプレイアダプタ
9×14ピクセルのフォントとしてIBM Monochrome Display Adapter  (MDA) のROMに、またColor Graphics Adapter (CGA) カードの8×8ピクセルのフォントとしてこのフォントはオリジナルのIBM PCに含まれていた。

これらのディスプレイアダプタはすべて各文字のセルに8ビット文字のコードポイントが含まれているテキストモードが存在していて（はこちらを参照）、256通りの値が表示可能文字として使えるようになっていた。ASCIIで非表示可能文字として予約されている0番から31番の範囲のコードも含めて、256コードすべてが表示可能文字としてROMに割り当てられた。

東ヨーロッパの様々なPC機種で異なる文字セットが使われていて、ジャンパやCMOSの設定でユーザーが選べるものもあった。現地語のテキストを表示ができるようにしつつもコードポイントを多くの罫線素片で共有するなどして、可能な限りコードページ437と合うようにこれらの文字セットは設計された。

 Altコード 
の数字の組み合わせはコードページ437とその他のDOSコードページがもとになっている。Altキーを押しつつテンキーで3桁で十進法のAltキーコードを入力することによってユーザーは文字を入力できる。マイクロソフトによって（CP1252などの）専用の文字セットに、後にUnicodeにWindowsで切り替えがなされたとき、もとのコードは残された（マイクロソフトはテンキーで数字の前に0を入力することでCP1252など実際の文字セットでコードを入力できるようにした）。

 文字セット 
コードページ437は次の表に表される。対応するUnicodeのコードポイントと十進法でのコードポイントが各文字とあわせて表示される。一部のコードポイントには対応するUnicodeのコードポイントが複数あるため下の注記も見ること。十進法のコードはAltコードとして知られてもいる。

256通りすべての8ビットコードにグラフィックがROMで提供されているが、一部のコードポイント、特に1番から31番の範囲と127番のコードは一部のAPIでは表示されない。代わりに制御文字として解釈される。例えばオリジナルのIBM PCでは多くのテキスト出力方法ではそれらのコードはBEL、BS、CR、LFとして解釈される。また多くのプリンタでもこれらの文字は印刷ができなかった。

 脚注 

Unicodeに変換するときには一部のコードは一対一にUnicodeで対応するものがないことに気を付けるべきである。何が正しい選択かは状況による。

 歴史 
ビル・ゲイツは1995年10月2日号のFortune Magazineのビル・ゲイツとポール・アレンとのインタビューの中でワングのワードプロセッサの文字セットからコードページ437の範囲はとられたと述べている。

 "... We were also fascinated by dedicated word processors from Wang, because we believed that general-purpose machines could do that just as well. That's why, when it came time to design the keyboard for the IBM PC, we put the funny Wang character set into the machine—you know, smiley faces and boxes and triangles and stuff. We were thinking we'd like to do a clone of Wang word-processing software someday."

 「...汎用マシンでワードプロセッサと同じ役目が果たせると考えていたため、ワングの専用ワードプロセッサにわたしたちも夢中になりました。IBM PCのキーボードをデザインすることになったときに、お知りの通り笑顔や四角形や三角形など、ユーモアのあるワングの文字セットをマシンに取り入れたのはこれが理由です。」

デイビッド・J・ブラッドリー（PCのBIOSの開発者）のインタビューによると、Andy Saenz（ビデオカードの責任者）、Lew Eggebrecht（PCの主任技術者）、また彼自身によってシアトルからアトランタへの飛行機に乗っているときの4時間の会議中にこれらの文字は定められた(訳注: 引用の翻訳: [...]IBM PCの文字セットの最初の32文字を見たらスマイリーフェイスや音符、トランプのスートなど、たくさんの変わった文字があることがわかります。これらは文字ベースのゲームに使うためのものでした。[...]8ビット文字を使っていたため新たに128この空きがありました。データマスターでの経験をもとにして重要な文字、外国語の文字を三桁にわたりいれました。ブロックの表示文字を三桁にわたりいれました。[...]MDAを持っている多くの顧客はグラフィックはまったく使えなかったでしょう。[...]残りの2桁には数学記号や(数学用の)ギリシア文字などがありました。[...]最初の32文字(x00からx1F)はどうしましょうか。[...]これらの文字はテレタイプの送信から来ていますが、文字ベースの画面に表示できました。なので「重要ではない」文字を加えました。文字を表示するためであって通信や保管のためではありませんでした。一番ありそうな使い方は文字ベースのゲームでしょう。[...]IBM PCに関してほとんどのことはそうでしたが、1年間の開発スケジュールではよく考えたり、修正を行う時間はほとんどありませんでした。[...]その文字セットは3人での4時間の会議中に開発されました。またそのシアトルからアトランタへの飛行機の中で会議を行った人の1人は私です。会議の後ちょっとした改訂のようなものがありましたが、そのために設計や修正、決定することがほかにもたくさんありました。[...]その飛行機に乗っているときにいたほかの関係者としてビデオカードの責任者のAndy Saenz、そのPCの主任技術者のLew Eggebrechtがいました。)。

表示文字の選ばれ方に関する内部規則がある。
 表の0番目と1番目の行、0番から31番 (00hexから1Fhex) までのコードは装飾記号(補足や装飾用の文字)に分類される。127 (7Fhex) 番と離れている文字もこのグループに属する。
 表の2番目から7番目の行、(127 (7Fhex) 番の文字を除いて、)32番から126番 (20hexから7Ehex) までのコードはASCII印字可能文字になる。
 表の8番目から10番目 (8hexからAhex )の行、128番から175番 (80hexからAFhex) までのコードは国際的なテキスト文字を収録している。
 表の11番目から13番目 (BhexからDhex)、176番から223番 (B0hexからDFhex) までのコードは罫線素片とブロック文字になる。右側に線がある文字や右側を塗りつぶすための文字は全て192番から223番 (C0hexからDFhex) までの文字に含まれるように、このブロックは配置されている。オリジナルのIBM PCのMDAではこのコードページの437グリフは8ピクセルの幅のビットマップとして保持されていたが、見た目をよくするために画面上では9ピクセルごとに表示された。この範囲の文字における各文字の8番目のピクセル列は特殊なハードウェア回路によって重複して表示され、各行の隙間、特に塗りつぶしを行った際の隙間をなくすために使われた。
 表の14番目から15番目 (EhexからFhex) の行、224番から255番 (E0hexからFFhex) までのコードは数学記号にあてられていて、最初の12コードは物理でよく使われるギリシャ文字を収録している。244番目 (FAhex) と245番目 (FBhex) は積分記号(∫)として使われる記号である斜体の長いsの上の部分、下の部分になっていて、179 (B3hex) 番の文字である罫線素片の縦線で伸ばせるようになっている。244 (F4hex) 番目の文字は長いs (ſ) の代替として使うこともできる。249番目 (F9hex) と250番目 (FAhex) は、前者が印刷上の中黒 (·) に似た後者を少し大きくしたものであり、ほとんど区別がつかない。255 (FFhex) 番目の文字はただ空白であり、数式を整えるためのノーブレークスペースのようなものとして働く。

マイクロソフトによってフォントのデザイナーにサポートすることが推奨されているWGL4セットの一部として、Windowsの多くのフォントはこれらの特別な表示文字は示したUnicodeのインデックスに含まれている。（少なくとも一部の解像度において、等幅のラスターフォントファミリであるTerminalはコードページ437の文字すべてを持つ初期のフォントである。）これらの文字をコードページ437のコードポイントから直接表示するためにMS LinedrawというWindowsのフォントはコードページ437の文字すべてを持ち、制限付きながらも、DOS向けのテキストをDOSで表示したように今のWindowsマシンで表示できるようにしている。

 国際化 
大体128から175の数値で国際文字が一続きにコードページ437に存在する。しかしながら多くの西洋の言語に大切ないくつかの文字が欠けている。
 スペイン語: Á、Í、Ó、Ú
 フランス語: À、Â、È、Ê、Ë、Î、Ï、Ô、Œ、œ、Ù、Û、Ÿ
 ポルトガル語: Á、À、Â、Ã、ã、Ê、Í、Ó、Ô、Õ、õ、Ú
 カタルーニャ語: À、È、Í、Ï、Ò、Ó、Ú
 イタリア語: À、È、Ì、Ò and Ù
 アイスランド語: Á、Ð、ð、Í、Ó、Ú、Ý、ý、Þ、þ
 デンマーク語/ノルウェー語: Øø うまく描画されないかもしれないが、（加えて、ストローク付きのOからはさらに遠ざかった形である開いた形のファイや閉じた形の垂直なファイとして、Unicodeに対応づけられたりUnicodeのフォントで描画されやすい。）237 (EDhex) 番目の文字の(近い形をしている)小文字のファイが代替として使える。 これを埋め合わせるために、デンマーク語やノルウェー語、アイスランド語のコードページ(コードページ865とコードページ861)ではセント記号 (¢) をø、円記号 (¥) をØで置き換えた。
 基本的な数学記号の範囲をこえたほとんどのギリシア文字の記号は省略されている。(ギリシア語のコードーページのコードページ737とコードページ869には含まれた。)

セント(¢)、ポンド(£)、円/元(¥)の通貨記号といっしょに以前使われていたヨーロッパの通貨記号がいくつかある。フローリン（ƒ、オランダ）やペセタ（₧、スペイン）である。スペインのペセタは国際的な通用力を持っていたわけでもなく、また「Pt」、「Pta」、「Pts」、「Ptas」のように省略されていただけであってそれ自体の記号はなかったため、後者の存在は異例である。ただしIBM Electric typewriterのスペインモデルでもその記号に独立した位置づけがされていた。

コードページ850 (DOS Latin-1) やコードページ850（DOS 中央ヨーロッパ）、コードページ737（DOS ギリシア語）のような後にできたDOS用の文字セットでは、混ぜ合わせた文字（例 二重線の横線/単線の縦線）は無くしつつも、単線および二線の罫線素片を残してコードページ437との互換性を部分的に保ちつつ国際的な使用をするために隙間がなくなっている。UnicodeとマイクロソフトのWGL4の文字セットに似ている字形がコードページ437の文字すべてにあり、そのためWindowsのほとんどのフォントで、またLinuxカーネルの標準VGAフォントで、X11のISO 10646フォントで使うことができる。

 関連項目 

 ANSI
 ASCII

  (コードページ437からの派生)

 脚注 
西ヨーロッパやアラブ、アジアの国でのシステムでは異なる文字セットがよく使われる。「OEM」という名称は「他社ブランドの機器製造メーカー」を意味し、ROMで提供される「ネイティブ」なハードウェア文字セットは製造メーカーによって異なる市場に沿うように変えられるということを示す。

 参考文献 

 外部リンク 
 IBM Code Page 437 reference chart
 IBM PC memory-mapped video graphics to Unicode Unicode公式サイト

437