UNIX系システムで使われた拡張Unixコードの日本語文字コード
EUC(イーユーシー)=Extended UNIX Code(拡張UNIXコード)の略で、UNIX系のシステムで日本語などの多言語を扱えるように作られた文字コードです。日本語版は特にEUC-JPと呼ばれます。
もともとUNIX=大学や企業のサーバーで使われてきた基本ソフト(OS)は、英語(ASCII)を前提に作られていました。そこに日本語を後から組み込む必要が出たため、ASCIIをそのまま生かしつつ漢字も追加できる方式として考案されたのがEUCです。
身近な例で言うと、英語専用だったノートに、ページを増やさず空いた余白に日本語も書き足すようなものです。元の英語(ASCII)の書き方を一切変えずに、新しい文字(漢字)を共存させる──この「ASCIIを壊さない」という方針がEUCの最大の特徴です。上の図解は、ASCIIと漢字を8ビット目で見分ける仕組みを示しています。
EUC-JPの符号化方式の核心は「8ビット目(最上位ビット)を1にすることで、漢字バイトとASCIIを区別する」点です。1バイトは8個のビットでできていますが、ASCIIは7ビット(0〜127)しか使わず、8ビット目は常に0です。EUCはこの使われていない8ビット目を「漢字の目印」として活用します。
具体的なルールは次のとおりです。
・ASCII文字:8ビット目が 0 の1バイト(0xxxxxxx)。値はASCIIとまったく同じ
・漢字・ひらがな:8ビット目が 1 のバイトを2つ並べる(1xxxxxxx 1xxxxxxx)
・半角カナ:「SS2」という目印(0x8E)+カナの2バイトで表す
この方式の利点は「先頭ビットを見るだけで文字の種類が分かり、漢字バイトがASCIIの記号と絶対にぶつからない」ことです。Shift_JISでは第2バイトにASCII記号と同じ値が現れて「ダメ文字」問題が起きましたが、EUC-JPは漢字に使うバイトをすべて8ビット目=1の領域に固めたため、この種のトラブルが起きにくく、プログラムで扱いやすいのが特長です。
EUCの要点は「8ビット目を1にして漢字を表す」「ASCII互換」「漢字は2バイト」という3点です。Shift_JISが「ASCIIの空き番号にずらす」のに対し、EUCは「8ビット目を立てる」という発想の違いを押さえておきましょう。
EUC-JPは、その名のとおりUNIX系のサーバーやワークステーションで日本語を扱う標準として広く使われてきました。Linuxを含むUNIX系OSや、そこで動くWebサーバー・データベースの日本語処理で長く採用されていた文字コードです。
EUCがUNIX系で好まれた理由は、UNIXの仕組みと相性が良かったからです。
・ASCIIと完全互換:既存の英語前提のコマンドやプログラムをそのまま使える
・制御コードと衝突しない:漢字バイトが8ビット目=1なので、UNIXが特別扱いする 0x00〜0x7F の記号と被らない
・切り替え記号が不要:ISO-2022-JPのようなモード切替なしで、そのまま日本語を流せる
ここで整理すると、同じ日本語でも環境によって主流の文字コードが異なっていました。UNIX系=EUC-JP、Windows=Shift_JIS、電子メール=JISコード(ISO-2022-JP)という住み分けです。これが、異なる環境間でファイルをやり取りすると文字化けが起きる原因でした。
現在はUNIX系を含めほぼすべての環境でUTF-8へ移行しており、EUC-JPを新規に使う場面は減りました。ただし古いシステムやログファイルで出会うことがあるため、「EUC=UNIX系の日本語コード」という対応を覚えておくと役立ちます。