マルチバイト文字 基礎編第4回 1


20140218

文字コードの話の続きです。今回はマルチバイト文字の概要を説明します。

コードな話

前回、文字コードやコード体系などの用語を定義せずに後回しにしましたが、話を進める上で、やはり定義しておくべきと思われますので、簡単に説明します。便宜上、以下のように定義しますが、厳密なものではありません。私自身、これを書いている時点でも明確に理解しているとは言えません。

  • 文字コード:文字に対応付けられた16進コード。例)「あ」:0x82A0(シフトJIS)
  • コード体系、文字集合、文字コードセット:文字と16進コードの割り当てをまとめたもの。ASCII、JIS X0201、JIS X0208、JIS X0213、ユニコード(ISO 10646、JIS X0221)など。ASCIIコード(表)、JISコード(表)などとも呼ばれる。
  • エンコード:文字をコード体系に従ってデータ化(符号化)する方式。シフトJIS、EUC-JP、UTF-8、UTF-16など。

これらの用語は同じ意味で使用されます。ここでは、ざっくりと定義しましたが、この定義は必ずしも正しいとは限りません。実際、コード体系とエンコードは重複する部分も多く境界が曖昧なため、明確に説明するのは困難です。実用性を重視した場合、あまり区別しない方がよいかもしれません。厳密な区別が必要になる方(出版業、印刷業など)は専門書でしっかり確認してください。ここでは、混乱を避けるためコード体系とエンコードを同じものとして扱い、文字コードとは区別して扱います。

2バイト文字

1バイト文字については、前回ASCIIコードにより規定されていることを説明しました。今回は2バイト(またはマルチバイト)文字について説明します。

1バイトには256のコードしかありません(0x00~0xFF)。記号と英数字を使うのであれば十分でしたが、アルファベット以外の文字を使用する言語ではまったく足りません。そこで、2バイトにサイズが拡張(0x0000~0xFFFF:0~65535)されました。

前に述べたように、PCの世界標準は1バイト文字(ASCII)であり、これは昔も今も変わりありません。PCやインターネットがアメリカを中心とする英語圏で発達してきたためです。現在でも1バイト文字(ASCII)は使用されており、各国がそれぞれの言語を使えるようにするために拡張した2バイト文字とインターネット上で共存させる必要があります。そのためにISOにより規格が制定されました。このガイドラインに沿って、国や言語ごとにコード体系が定められています。

「あ」という文字を秀丸を使って文字コード表示をしてみると、いくつものコードがあることがわかります。

ChrCode01

また、秀丸エディタの「エンコードの種類」を見ると非常に多くの種類がありますが、ここでは上図に見られる主要なものだけを取り上げます。

JIS:ISO-2022-JPの通称です。電子メールで使用されます。

シフトJIS(Shift-JISまたはS-JIS):PC上で文字を扱うための標準形式。WindowsやMac OSの標準的な形式です。

EUC:UNIXで採用されている形式です。インターネットではUNIXが主流であったため、ネット環境では広く使用されています。

このように日本語環境だけでも複数の方式があり、世界中で何種類もの方式が使用されています。これを自動で判別するにはあまりにも数が多く、トラブル(文字化けなど)も発生します。Htmlファイルの作成時にエンコードを指定する方法もありますが、無駄な処理が増えてしまいます。そこで、世界中のコード体系を統一しようと考えられたのがUnicodeです。

マルチバイト文字

Unicode:世界中の文字を共通の体系にまとめるために考えられた標準規格。現在はUnicodeの使用が主流になりつつあります。2~4バイトの文字コードのため、マルチバイト文字と呼ばれます。

統一規格と聞くと聞えが良いのですが、まだまだ多くの問題を抱えています。当初、Unicodeは、文字数の少ない国(某大国)の思惑もあり2バイト文字で十分と考えられていました。この2バイト(16ビット)の領域(BMP:基本多言語面)には65,535文字を格納できますが、結局足りなくなったため、サロゲートペアというルールが制定され32ビット長の拡張領域が追加されました。このため、BMP外の文字に対応したソフトウェアやフォントがまだ少なく、文字が表示されない場合もあります。さらに漢字統合やコードセパレーションといった問題もありますが、現在多くのアプリケーションで使用され主流となっています。

現在使用されているUnicodeのエンコード方式は、次の2つです。

UTF-8:16ビットの文字コードを1~3バイトに変換してエンコードします。現在の標準です。

UTF-16:16ビットの文字コードをそのまま利用します。また、リトルエンディアン(LE:Little-Endian)とビッグエンディアン(BE:Big-Endian)という2つの方式があり、その判読のために先頭にBOM(0xFEFF)が埋め込まれることがあります。

まとめ

今回はマルチバイト文字について、概要を説明しました。

  • 文字コード等の定義
  • 2バイト文字の説明(JIS、シフトJIS、ECU)
  • マルチバイト文字の説明(Unicode)

わかりにくい部分も多いと思いますが、要するに

文字はシフトJISやUnicodeなどのコード体系により規定された方式で文字コードに割り当てられる

ということです。さらに、

PCではシフトJISが主流であったが、Unicodeも多く使われるようになった

ということを覚えておけば十分です。

次回は、文字コードについて具体的に見ていきたいと思います。

ご質問ご感想をお待ちしております。

では、また。

修正:オレンジのハイライト部

 


コメントしてみる

One thought on “マルチバイト文字 基礎編第4回