――あるいは How to be an Computer Otaku
(ascii.PC 2001 年 5 月号)
山形浩生
アルコール的にチャレンジドな街で開かれた今年のオリンピックのフィギュアスケートで、「ライーヨー」という変な刺繍のついたコスチュームで演技をした選手が登場して、一部の日本人を大喜びさせてくれたのをご記憶だろうか。その他にも最近は日本語がちょっとしたファッションアイテムにはなっている。たとえば映画『マトリックス』のオープニングは、コンピュータ画面らしきところに、緑の半角カタカナが日本語式に縦に流れていて、一部のおたくの間では話題になった。あとぼくの大っきらいなマドンナという歌手がいるけれど、去年出た彼女のライブ盤「ライブ・イン・デトロイト 2001」のジャケットには「モチシラミミチ」という変なカタカナが(縦に)書かれている。(注:なんのことだかわからない? キーボードをカナ入力にして、madonna とタイプしてみましょう)アンジェリーナ・ジョリーが「死」という刺青をしているのも有名だし。ポケモンやニンテンドー(ファミコン)ブームのせいも、もちろんあるんだろう。でもそれ以上に、ビジネスも遊びも国際化してきて、欧米ですらローマ字だけじゃ用が足りないことをだんだん認識しつつあるのだ。
というわけで、ローマ字以外を使いたい雰囲気はある。が、そこに大きく立ちはだかる障害がある。「文字化け」というやつだ。
日本でネットをやっていて、文字化けに出くわした経験のない人はいない。もらったメールが全部 ???? ???? になっているとか、開いたウェブページがやたらに % ばかりのまったく読めない文字になってしまうとか。あの現象のことだ。
これに相当することばは、少なくとも英語にはない。日本にいるアメリカ人でも「mojibake」ということばを使う。欧米人がこの現象に遭遇するようになったのは、インターネットが普及して偶然に外国語のページを見るようになってからのことだもの。その点日本語は、自慢じゃないがずいぶん昔からこの現象に悩まされてきた。というわけで今回はその話だ。本当なら、ふつうのエンドユーザが知る必要のないようなレベルの話ではあるはずなんだ。でも、実際には多くの日本人は文字化けに悩まされているから、これをいやでもあれこれ考える必要が出てくる。そして、コンピュータの世界がますます国際化するにつれて、この悩みは世界に広がりつつある。
コンピュータは、なんでも数字として扱う。ワープロで文を打つときも、コンピュータは別に「これは『あ』だ」「これは『山』だ」と理解して扱っているわけじゃなくて、各種文字に番号を振って、その番号を並べているだけだ。「あ、287 番の字を表示しといて」という具合に。そして、どの文字にどういう番号をふるか、というお約束を文字コードという。すごく大ざっぱではあるけれどね。
で文字化けの最初のハードルは、そもそもフォントがないことだ。「287 番の字」がハングルだったら、ハングルのフォントがないと変な ??? で表現される。
でも、たとえば日本語のフォントがあっても、日本語のページやメールが文字化けを起こすことがある。これは文字コード、つまり字と番号の対応にいくつか流派があるせいで起きる。日本で使われる主要な文字コードは、JIS、EUC-JP、シフトJIS、ユニコードくらい。そしてこの流派ごとに、同じ字でも割り振られている番号はぜんぜんちがう。「馬」という字はシフトJIS では 946E、JIS では 474F、ユニコードでは 99AC。だから、JIS の文字をシフトJIS だと思って開こうとすると、でたらめが表示される。手近なところでウェブのブラウザには、「エンコード」とかいうメニューがある。ふつうは「自動選択」になっているけれど、いろいろ変えてみるといつも見ているページが文字化け表示になるだろう。
面倒くさいなあ。なんでそんないくつも流派があるの? 統一しちゃえばいいのに。ふつうの人はそう思う。ところがだね、その番号の振り方にも、いろんな考え方があるし、またそれぞれが出てきた歴史的な経緯があるのだ。そして、いったん普及しちゃうと、この手のものはなかなか変えられない。
そもそもいろんな流派が出てきた原因は、コンピュータがもっぱらアメリカやヨーロッパで発達してきた、という事情がある。この人たちは、字の数が少ない。アルファベット 26 の大文字小文字、それに数字と記号いくつか。これは、7 ビットで表現できる。コンピュータは歴史的に 8 ビット(1 バイト)単位でデータを処理するんだけれど、だからかれらは 7 ビットで文字を表現して、余った 1 ビットはエラーチェックや各種制御に使う、というとても効率のいい文字コードを作った。実は本誌の出版元の「アスキー」というのは、アメリカの文字コード規格の名前だ(だから 20 年以上前に初めてこの会社の名前をきいたときは、すごく違和感があったんだけれどね)。
ところがその後で、日本をはじめ、アルファベット以外の文字を使う文化圏も、コンピュータを使おうとした。日本では、まず余った 8 ビット目をつかって、カナを表現しようとした。これがいまの、通称半角カナというやつ。ところがその頃には、欧米ソフトの多くはその 8 ビット目を別のことに使うようになっていて、そこへ半角カナのファイルを流すと、文字化けや誤動作が起きるようになった。ときどきインターネット関係の本を読むと「半角カナは使うな」と書いてあったりする。それは、こういう事情があるのよ。
さらにその後、やっぱひらがなや漢字も使いたいということになった。ところが漢字はべらぼうに多い。よく使うやつだけでも数千は必要だ。どうやっても、8 ビットでは表現しきれない。そこで 2 バイトで一文字を表現しよう、ということになったわけ。
そしてこれまた文字化けの原因になった。多くの欧米ソフトは、一文字を 2 バイトで表現することがあるなんて考えたこともない。だから 1 バイトずつ文字を処理する。JIS で 474F は「馬」、だけれど、アスキーしか知らないコンピュータは、それを 1 バイトずつしか理解できないので、これが「GO」だと思ってそう処理してしまう。また、時には漢字を真ん中で平気でぶったぎってしまう。たとえばワープロ入力中にバックスペースとか消去を押して、文字を消そうとするとき、日本語がわからないコンピュータは愚直に一バイトずつ消すしかできない。たとえば JIS で 474F 3C2F は、「馬鹿」という二文字だ。ここで「馬」を消そうと思って、最初の 4F だけ消しちゃったらどうなるだろう。すると「麓/」になって、でもコンピュータは何も気がつかない。これまた、文字化けの原因だ。でも文字コードをうまく設定してやると、これを回避しやすくなる。EUC やシフトJIS は 8 ビット目を使うかわりに、そういう読み間違いはおこりにくい。コードの設定の仕方によって、他のシステムと互換性ができたりするし、あるいはある種の文字化けが起こりにくくなったりもする。
わかりにくいな。じゃあこんな説明はどうだろう。たとえば、一学年 300 人で、50 人ずつの 6 学級ある学校で生徒に学生番号を振る場合を考えようか。頭から、1~300 と振る手もある。でも、1 組の子は 101~150、2 組の子は 201~250、というふうにふったらどうだろう。こうすれば頭の番号を見ただけでその子が何組か、すぐわかる。入学年次を頭につけたらどうだろう。01101~01150 だと、2001 年入学の 1 組の 1 番から 50 番まで。数字を見ただけでいろんなことがわかる。ついでに、男の子は偶数、女の子は奇数を振ったら、下一桁を見るだけで性別がわかる。こんな具合に、番号の振り方によって、いろんな処理が簡単になることがわかるだろう。文字の場合も同じだ。大文字と小文字。カタカナとひらがな。1 バイトで表現できる文字(アルファベットや数字)と、2 バイト以上ないと表現できない文字。うまく番号をふると、それを一目で見分けられるようになる。2002 年入学の 3 組に女の子が何人いるか数えたい? 頭三桁が 023 の学生番号を選んで、次に最後の桁だけ見て、奇数がいくつあるか数えればいい。無秩序に番号を振っていたら、頭から一人一人見ていって「えーと、こいつは入学年が何年で、何組で……」と端から名簿をチェックするしかない。間違いも増えるだろう。これが文字コードならどうだろう。原稿に何文字あるか数えたい? だったら文字の先頭を示すコードを用意してみたらどうだろう。そしたら、その先頭記号だけ数えれば何文字あるかわかる。さもないと、コンピュータはデータを一バイトずつ見て「これは 1 バイト文字かな、それとも 3 バイト文字の 2 バイト目かな」とチェックしていくはめになる。手間もかかるし、うっかりチェックをまちがえたら、これは文字化けだ。賢い文字コードは、そういう事態を劇的に減らしてくれる。
一方で……いまの学生番号の例で言うと、使っていない番号がたくさんできる。男子校にこの学生番号コードを導入したら? 奇数番号はすべて欠番だ。それならまだ規則性があるからいいけど、妙に女の子の多いクラスだったら? 全校学生でくじびきをするときに、使っていない番号を抜くのが面倒かもしれない。各クラスに何人いるか知りたいときはどうだろう。クラス毎に男も女も分けずに 1 からふっていけば、最後の子の番号を見ればそれが人数だ。でも男女別に振ったら、男を数えて、女を数えて、足すという手間がかかる。計算間違いも起きやすくなるだろう。さらに、将来なんかのまちがいで学生数が劇的に増えたらどうしようか。文部省(じゃなくていまは教育科学省だっけ)が、130 人学級を導入したら、この方式はダメになる。一学級の中が、100 人以上になったら番号が足りなくなるからだ。あるいは、日本が難民受け入れを決めて一学年 1,000 人以上になったら……桁をうっかり増やすわけにはいかない。あとづけで桁を増やしたら、これまでのデータを全部修正しなきゃいけないからだ。端から番号をふるだけなら、何も問題はなかったのに、こざかしい余計なことを考えたばかりに手間が増えることになる。
さらに、そういう事態を避けようとして、余裕を持った学生番号を用意するという考え方もある。さっきの方式で 01126 という学生番号の子がいたら、たとえば 00000100001000026 なんていう番号をつけてみたらどうだろう。確かに学生数が増えてもパンクはしない。一クラス 10 万人だってどんと来い! けれど、学生番号の桁が必要以上に増えることで、こんどは番号の書き間違いが山ほど増えるだろう。さらに成績表や各種データ表を印刷しようとしたとき、左半分がすべて学生番号だけになって、使いにくいことおびただしい。文字コードでいえば、1 文字 2 バイトで表現できていたものが、1 文字 3 バイトも 4 バイトも必要になったりする。するとたとえば同じ文章を保存するのに、何倍ものディスクスペースを使うことになる。これまたいやだろう。
てなわけだ。たかが学生番号の振り方でも、いろいろ善し悪しが出てくる。同じようにいろんな文字コードに一長一短があって、それぞれの立場の人が相互にいがみあっている。
ただまあ、いまくらいなら直感的にわかるけれど、もっと細かいところになると、この文字コードははっきり言って一般人には理解しがたい世界になってくる。字と数字の対応表を見て「美しい」とか「醜い」とか「エレガント」とか、あるいは「頑丈」とか論じるというのは、なかなか普通の感覚ではない。要は、文字コードの流派ごとに強み弱みがあって、場面に応じてまちがいの起きにくい文字の並べ方や番号の振り方というのがあるのだ、ということだけ理解しておいてもらえればいいかな。そして、その弱みによって生じる文字化けもあるんだ、というわけ。
さらに文字コードがらみの喧嘩の種は文字化けだけじゃない。コードの番号をふるためには、番号をふる対象をきちんと決めなきゃいけない。アルファベットなら、全体はすぐに決まる。ところが、漢字ってのは全部でいくつあるかもよくわからない。他にまったく用例がなくて、でもある小学校の名前にだけ使われている、とかいう漢字があったりする。そんなのがぞろぞろ出てくると、どこまで番号をふればいいか決めるのだって一苦労だ。そして、それがなんとか片づいたとしよう。たとえば「団」という字はよく使うから、これに番号を振っておくことにはだれも異議はない。が、ここで大きな問題が生じる。何が同じ字で、何がちがう字か、という見解が人によってちがうのだ。たとえば「実」「団」とその旧字体「實」「團」は、同じ字なんだろうか、ちがう字なんだろうか? これをどう解釈するかによって、これに別々に番号をふるべきか、同じ番号にするべきかが変わってきてしまうわけ。このくらいなら、一見するとかなりちがう。でも、「斉藤」と「斎藤」って、別の名前なの? 同じ名前なの? あるいは「高」と「高」(註:ほーら表示されない。ここは、いわゆる「はしご高」という、ふたの下にある口が口じゃなくて、はしごみたいに上下にくっついている高を表示したつもりなのだ)って同じ字、ちがう字? コードは別々にしようか、それとも同じ字のスタイルがちがうだけだから、同じ番号をふっておけばいいのかな?
一見すると、これは別々にしたほうがいいように思える。自分の名前が旧字体になってないと怒る人はたくさんいるものね。それに細かく分けられたほうが繊細でよさそうだ。日本文学の研究者は、絶対に別にしろと主張する。この手の話で必ず引き合いに出されるのが森鴎外。この鴎の字の右側は、区じゃなくて區が正しい、という。いまの文字コード規格はそれを表現できない。ああ、明治の大文豪の名前すら「正しく」表記できないとは、なんと嘆かわしいことか! これでは天国(または地獄)の森鴎外も、浮かばれまいに! これは表現に対する許し難い冒涜である! こんな改竄が行われるようでは、日本文学の電子化は不可能であり、これは文化の破壊である! 許し難い! というわけ。なるほどね。
ところが……まず調べてみると、森鴎外自身は、両方使ってるんだって。当人は大して気にしていなかったんだね。安らかに成仏してることだろう(少なくともこの件では)。そしてもっと大事な問題。文学屋さんの意見をいれて、この両者を別々のコードに割り振った場合、古い字で検索をかけると、この新しい字で表記された森鴎外はヒットしないことになる。不便だと思わない? 旧字だろうと新字だろうと、森鴎外は森鴎外。電子テキストは、なにも印刷したり画面に表示したりして読むだけが能じゃない。検索、切り貼り、インデックス化――そういう自動処理のほうが大事かもしれない。なんでも別々にしろ、という議論は、下手をすると字形にこだわるあまり、電子テキスト本来のそういう意義を殺してしまうものになりかねない。
そしていま、冒頭でちょっと触れた大きな動きがある。漢字だけじゃない。アラビア語もタイ文字もハングルもまとめて、世界のあらゆるところで同じコンピュータ環境が使えるようにしよう、という動き。同じソフトがあらゆる言語で使えたらどんなにいいか。もう「日本語版」を待つ必要もない。それに同じ文書で、英日アラビアハングルすべて混在できたら、これまでの「対訳」の枠を超えた新しい表現の可能性も出るじゃないか。そのために、世界中の文字コードをひとまとめにしようという動きがある。その最もメジャーな一つがユニコード、というやつだ。
これはすでにかなり広まっている。最近のウィンドウズやマッキントッシュやの多くは、内部処理をユニコードでやっている(Linux なんかではその兄貴分の規格を採用している)。これが普及しきれば、もう文字化けに悩まされることもない。どんな言語でもこれでほぼ表現できる。このユニコードを使ったファイルを見ると、世界中の文字が同じ文書の中に平然と共存していて、すばらしく感動的ではある。
でもその一方で、これを蛇蝎のごとくに毛嫌いする人も多い。ユニコードでは、日韓中で使われる漢字で同じものや、似ているものをまとめて同じコードを割り振った。いわゆる漢字統合というやつだ。これに対してすごく批判がある。日本や韓国や中国それぞれでちがう文化的な経緯を経てきた字をいっしょくたにするのはけしからん、野蛮な紅毛碧眼メリケン人の打算による文化破壊だ、ユニコードは欧米文化帝国主義と商業主義によるアジア侵略だ! と真剣にいきまく人も多い。
でも漢字統合はそんなに悪いことなのかな。たとえば「一」という漢字がある。日本でも、中国でも、韓国でも、同じ形で同じ意味だ。ところが漢字統合に反対する人は、いわばこれをすべて別々に扱えと言っている。それはヘンでしょう。「一」はどこでも同じにしたほうがいいと思わない? ユニコードの漢字統合の基本はそういうことだ。そしてその考えを推し進めると、森鴎外問題と同じものにぶちあたる。「同じ」字って何なんだろうか。いまの中国では広州を广州と書く。「広」と「广」はさすがにちがう字だ、と言っていいだろうか。でもどっちも「廣」と書くのがめんどくさくて簡略化した字だし、同じ字だとも言えるでしょ。さらにネットで資料検索するとき、「広州」で検索したら「广州」も「廣州」同時にヒットしてくれるほうがありがたいと思わない? そう考えると、極端な話、広と广と廣を同じ字だということにして同じコードを割り振ることだってできると思わない? むろんこれは極論だし、分けて検索したい場合だって当然あるだろう。さらに同じ「一」でも、場合によってはコードを見ただけですぐに何語の文脈の中での「一」なのかわかったほうがいい、ということも言えるだろう。でもちがいにばかりこだわって、同じ部分を見失うことにもデメリットはあるんだ。
こう書くと、「山形はユニコーダーだ、氏ね!」と石を投げる人が必ず出てくる。うーん、別にぼくはユニコードが唯一絶対すばらしいとも思っていない。でも一方で、ユニコードであっても特に不便はないじゃないか、と思ってはいる。「ユニコードなんか使い物になりません!」という人はいろいろいるけれど、「つかいもの」なんて一意的に決まるもんじゃないでしょ。何に使うかによって、ぜーんぜん話は変わってくる。万能なものなんかあり得ないでしょう。問題は何を重視するかだ。ぼくの日々の用途では、それは十分に使い物になる。そしてすでにそれが広まっていて、世界中で同じコードがまがりなりにも使えるようになりつつある――そのほうが重要だとは思っている。
もちろん、ひたすらちがいにだけこだわる立場はある。たとえば数万字の漢字を別々に表現できるのが売りの「超漢字」というソフトが出ている。そしてこれは、いくらでも好きに文字を追加できるとか。ふーん。でもそれが本当に人々の求めるものなのか、ぼくは必ずしもよくわからない。そういうのを必要とする研究者とか、特殊なニーズはあるだろうけれどね。ただ、特殊なニーズは特殊に対応すればいいだけではないか、ともいえるわけだ。ちがいにばかりこだわる立場は、森鴎外自身(そして「齋藤」でも「斉藤」でもいいよ、と思っている多くの人)がそうだったような「どっちでもいい」立場を抑圧するものでもある。そしてもう一つ、本当に文字コードがあるとかないとかで破壊されるほど、人の文化はヤワなものなんだろうか?
というところで紙幅がなくなった。今回は固い説明ばかりだったけど、次回は最終回だから、まずはいまの話の続きをちょっと片づけてから、コンピュータでぼくたちになにができるか、という話をもとに、思いっきり大風呂敷をひろげてみようか。
前の号 次の号
ASCII.pc Top YAMAGATA Hirooトップ