中文電脳/文字コードの基礎知識

Top / 中文電脳 / 文字コードの基礎知識

中国語ページが見られないわけ

1.文字化けと文字コード

インターネットをある程度使いこなしている人ならば、何かの拍子に中国語のページを開いてしまい、意味不明の文字の羅列にびっくりした経験があるかもしれない。そうした現象を“文字化け”(乱碼)という。

文字化けはまぜ発生するのだろうか?それは、日本と中国では使用している文字コードが違うからだ。

コンピュータというのは、よく知られるように、「○●」の二進数しか扱えない。しかし、それでは人間が理解できるような文字や文を表現することができない。そこで、文字に番号を振って、その番号をもとに文字の図形を呼び出して表示したり印刷したりする方法が考えられた。これが、文字コードだ。

具体的には、まず、二進数4桁

●●●●

つまり合計16通りの組み合わせを1セットとして扱うことにした。それらは、便宜的に0~9、A~Fの文字で表現される。そして、それを2つ一組にした

●●●● ●●●●

その組み合わせ一つ一つに、文字を割り当てることにした。この合計八桁の二進数のセットがバイトだ。1バイトでは、16×16、合計256種類の文字に番号をふることができる。その番号に基づいて、別に用意した絵記号一覧から文字の画像を読み出すことで、コンピュータは文字表示を実現している。

こうして、制定された英語の文字コードが、ASCII(アスキー)コードだ。一文字の表現に1バイトを使っている。

0123456789ABCDEF
0NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSI
1DLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS
2SP!"#$%&'()*+,-./
30123456789:;<=?
4@ABCDEFGHIJKLMNO
5PQRSTUVWXYZ[\]^_
6`abcdefghijklmno
7pqrstuvwxyz{}DEL

例えば、21は「!」、56は「V」というように、アルファベット、数字そして主要な記号がコード化された。

しかし、数千数万もの文字数がある東アジア諸語をコード化するには、256文字では到底足りない。この問題を解決してはじめて制定された漢字コードが、日本のJISコードだ。実際にPCで使われているのは、JISコードの番号をずらした、シフトJISコードだが、収録文字は変わらない。

シフトJISコードでは、2バイトで文字を表現する。しかしASCIIコードとの整合もはからねばならない。そこで、ASCIIの空き領域に注目した。たとえば、ASCIIコードの「81」は空いている。そこで、「81」で始まる番号は2バイトということにして、8100~81FFまで、256文字を定義した。これならば、2で始まるバイトはASCII、8で始まれば漢字、というように、従来のASCIIも漢字やかなも使うことができる。JISコードでは、漢字約六千字が定義されているが、規格は制定されてからこれまでに何度か更新されている。

JISコードが制定されると、東アジア各国は、それに倣って独自の文字コードを制定した。主なコードを比較すると次のようになる。

国・地域日本中国台湾・香港韓国
コード名JIS X 0208/JIS X 0213GB/GBK(国家標準碼/同 拡展碼)Big5(大五碼)KS
収録漢字数約6200/21000約7000/21000約13000約5000

ややこしいことに、同じ中国語と言っても、中国と台湾とでは文字コードが違う。中国のGBコードは簡体字、台湾Big5コードは繁体字を収録するため、定義されている文字も全然違っている。ちなみに、中国と台湾とでは文字コードばかりでなく、コンピュータ用語も全く違うので、注意が必要だ。

これらの文字コードが制定された当時、インターネットを通じて、国際的に電子ドキュメントをやりとりする時代が来ることなど誰も考えていなかった。そのため、これらの文字コードの間で互換性がはかられることはなく、逆に独自の文字コードを持っていることが先端技術国家の象徴であるかのように考えられてきた。

2.文字化けのメカニズム

以上のように、日本と中国では使用している文字コードが異なっている。そのため、文字化けが発生するのだ。では文字化けがいかに発生するのか、詳細に見てみよう。

以下のリンクをクリックして開いてみよう。

文字化けサンプル1

次のように表示されるはずだ。

シyタウクqケム、jセヌ

なにやら呪文のような文字列、文字化けしているのだ。

Internet Explorerの場合、文字化けは次いずれかの手順で解消できる。

  • 文字化けしたページ上で右クリック → 「エンコード」 → 適切な文字コードを選択
  • 「ページ」 → 「エンコード」 → 適切な文字コードを選択(IE8)
  • 「表示」(上にメニューバーが表示されていないときはAltを押す) → 「エンコード」 → 適切な文字コードを選択

では、なぜこのように文字化けしてしまったのだろうか?「シyタウクqケム、jセヌ」を、Shift-JISのコード番号で表記すると、次のようになる。

コード番号BC79C0A9B871B9D1A46ABEC7
Shift-JIS収録文字yqj

同じコード番号を、台湾Big5コードで解釈すると、次のようになる。

コード番号BC79C0A9B871B9D1A46ABEC7
Big5コード収録文字

このように、本来Big5コードで解釈しなくてはならない文字情報を、誤って日本語Shift-JISコードで解釈してしまうために、文字化けが発生しているのだ。ここで挙げた例は台湾Big5コードの文字化けだが、中国GBコードで文字化けが発生する原因も同じだ。以下で試して欲しい。

文字化けサンプル2

3.Unicodeの登場

インターネット時代になり、国家の枠組みをこえて情報が行き来するようになると、文字コードの互換性問題が脚光を浴びるようになった。また、国際的ソフトメーカーでは、世界各国語版を開発するコストを削減する必要に迫られた。

そのため、マイクロソフト、IBM、アップルコンピュータなどが参加するNGO、Unicodeコンソーシアムが中心となって、世界中の文字を一つのコード体系にまとめたUnicodeが制定された。

Unicodeの漢字部分は、日中台韓の各文字コードに含まれる漢字を、字形に基づいて約二万九百字に統合したもので、各国の頭文字を取ってCJK統合漢字と呼ばれる。

20世紀末、Unicodeが登場した際には、日本文藝家協会が中心となり、日本の文化がアメリカに侵略されるとする排撃キャンペーンが行われたものだ。確かにUnicodeは多くの問題を抱えている。しかし、Unicodeのお陰で、従来のJISコードの数倍もの漢字や、世界の多くの言語が簡単に利用できるようになったし、今やWindowsもMAC OSもUnicodeベースで作られているのだ。そもそもUnicode策定は広く世界中の人々に開かれているのだから、日本という枠に閉じこもらずに、むしろ規格策定に積極的に関与して理想的な姿にするよう努力するのが、建設的だと言えよう。このうような事例のように。

さて、Unicodeでは、当初、65,536のコードポイント(16*16*16*16=16ビット=2バイト)に世界のあらゆる文字を定義しようとした。Unicode 2.1ではCJK統合漢字に、約21,000字が定義されてる。このCJK統合漢字で、一般的な文献はほとんど問題なく表現できる。

一方、古典文献データベースの開発などにともない、より多くの漢字をUnicodeで扱えるようにしよう、という動きが出てきた。このため、Unicodeの漢字領域は、拡張A(Ext.A):約6,500字、拡張B(Ext.B):約43,000字と、着々と拡張されている。Unicode5.1.0では、麻雀パイなども追加されている。

現在、Windows Vista/7では、Ext.Bの全ての漢字が標準で使用できるようになっている。

4.Unicodeとコードセパレート問題

Unicodeは、世界のさまざまな文字コードを統一したものである。しかし、既存の文字コードは、それぞれ文字の収録基準が異なっており、そのためにUnicodeは一部に矛盾を抱え込むことになった。

台湾のCNSコード(Big5コード上位互換の公式文字コード)では、台湾で使われる中国語繁体字の一般的な字形と異なる日本の字形を、全て別のコードポイントに収録している。このため、日本のJISコードの包摂基準 *1では同じ文字であるとされる漢字が、二つのコードポイントに分かれてしまっている。

JISBig5
-

この基準は、元の文字コードで分かれていたかどうかなので、同じパーツであっても統合されていたりされていなかったりと、基準が統一されていない。

JISGBBig5

これらの文字の存在は情報検索や文書作成の際に、落とし穴になる危険性があるので、注意しなくてはならない。


*1 ある字形を同じ文字であるとみなすこと。字形の微妙な違いについて、どこから別の字で、どこまでが同じ字であるかという基準。