中文電脳/文字コードの基礎知識 のバックアップソース(No.4)

*中国語ページが見られないわけ [#eac2281c]

**1.文字化けと文字コード [#df0106a6]

インターネットをある程度使いこなしている人ならば、何かの拍子に中国語のページを開いてしまい、意味不明の文字の羅列にびっくりした経験があるかもしれない。例えば、こちらをクリックしてほしい。人民日報のホームページが表示されるが、画像部分は読めるものの、中国語部分が意味不明の文字に化けているはずだ。この現象を“文字化け”(乱碼)という。

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

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

具体的には、コンピュータでは二進数4桁●●●●を一組とした、一六進数が使われる。それらは、便宜的に0~9、A~Fの文字で表現される。そして、文字に番号を振る際には、それを二つ一組にした●●●● ●●●●が使われた。この合計八桁の二進数のセットがバイトだ。1バイトでは、16×16、合計256種類の文字に番号をふることができる。その番号に基づいて、別に用意した絵記号一覧から文字の画像を読み出すことで、コンピュータで文字を表示させるのだ。こうして、制定された英語の文字コードがASCII(アスキー)コードだ。一文字の表現に1バイトを使っている。

||0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|
|0|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|
|1|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|
|2|SP|!|"|#|$|%|&|'|(|)|*|+|,|-|.|/|
|3|0|1|2|3|4|5|6|7|8|9|:|;|<|=|>|?|
|4|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|
|5|P|Q|R|S|T|U|V|W|X|Y|Z|[|\|]|^|_|
|6|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|
|7|p|q|r|s|t|u|v|w|x|y|z|{|||}|~|DEL|

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

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

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

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

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

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

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

**2.文字化けのメカニズム [#j26078af]

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

[[ここ>http://wagang.econ.hc.keio.ac.jp/test1.html]]をクリックして開くと、次のように表示されるだろう。

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

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

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

,コード番号,BC,79,C0,A9,B8,71,B9,D1,A4,6A,BE,C7
,Shift-JIS収録文字,シ,y,タ,ウ,ク,q,ケ,ム,、,j,セ,ヌ

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

,コード番号,BC79,C0A9,B871,B9D1,A46A,BEC7
,Big5コード収録文字,慶,應,義,塾,大,學

このように、本来Big5コードで解釈しなくてはならない文字情報を、誤って日本語Shift-JISコードで解釈してしまうために、文字化けが発生しているのだ。ここで挙げた例は台湾Big5コードの文字化けだが、中国GBコードで文字化けが発生する原因も同じだ。[[こちら>http://wagang.econ.hc.keio.ac.jp/test.html]]で試して欲しい。

**3.Unicodeの登場 [#ma2a67aa]

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

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

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

20世紀末、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>http://www.unicode.org/versions/Unicode5.1.0/]]では、[[麻雀パイ>http://www.unicode.org/charts/PDF/U1F000.pdf]]なども追加されている。

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

**4.Unicodeとコードセパレート問題 [#hf91871f]

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

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

|JIS|Big5|
|説|說|
|啓|啟|
|内|內|
|衛|衛|
|衞|-|

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

|JIS|GB|Big5|
|骨|&lang(zh-cn){骨}|&lang(zh-tw){骨}|

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