日本語フォントについて(1)
Final Updated 2002/05/19
はじめに
- Mac OS Xが完全なUnicode対応ということなので、私も少しコンピュータにおける日本語の扱いについて勉強してみました。コンピュータのテクノロジは完全にアメリカ主導になっているため、日本語の扱いはかなりイレギュラーなのです。Mac OSでもそれは同じです。ただ、実はもっと奥深いところ、つまり、日本語の文字を扱うところから問題があったのです。今回いろいろ勉強してみてそれを痛感してしまいました。
- 実はこれは2年越しの原稿です。2000年2月のMacworld/TokyoでMac OS X Betaのデモを見て以来、Unicodeに興味を持って勉強したものをまとめにかかったのですが、専門用語だらけで四苦八苦の連続でした。情報はインターネット上にたくさんあり、Mac OSに付属するインターネット検索システムのSherlockや検索サイトのGoogleを使えば簡単に集めることが可能でした。また、Macintosh情報誌のバックナンバーやちょうどタイミング良く出版された「電脳社会の日本語」(加藤弘一著:文春新書ISBN4-16-660094-X:初版2000年3月20日発行)を参考に何とかまとめてみました。また、「-図解でわかる-文字コードのすべて」(清水哲郎著:日本実業出版社ISBN4-534-03224-2:初版2001年4月20日発行)も出版されています。参考文献の詳細は最後にまとめてありますので興味のある方やもう少し勉強したいと思う方はご覧ください。
- このページを私がまとめた目的ですが、「より簡単にまとめてみたい」という単純なものです。つまり、私はこれら参考文献を読んでもよく理解できなかったのです。そのため、ページをまとめるのに2年近くかかっています。というのも、これらの参考文献はスキルが高い人の手によるものが多く、素人にとってはレベルが高く、情報も断片的なのです。そのため、私のような素人にでもわかるレベルにブレイクダウンしてまとめてみました。
- ただ、私の理解不足や誤解はあると思います。これらの文献を参考にしましたが、以下の内容は私なりに書き起こしたものです。ですから、間違いなどがあったとしても全て私の責任です。このページはあくまでも、専門書を読む前の予備知識を得る程度の内容だということをご理解ください。
なぜフォントなのか
- もう少し私がなぜフォントに興味を持ったのかを書いておきましょう。Mac OS XはUnicodeをサポートしているのですが、実際にはMac OS 8.5以降もUnicodeをサポートしています。しかし、両者には大きな違いがあります。それは、Mac OS Xに添付されるヒラギノフォントです。このヒラギノフォントは2万程度の文字数があります。ですから、Unicodeを最大限に活用できるのです。これに対してMac OS 8.5以降に添付されるフォントは8000程度しか文字数がありません。そのため、Unicodeに対応していてもそれを生かし切れないのです。
- さて、なぜUnicodeが重要なのでしょうか。それは「互換性」の一言に尽きます。今のようなインターネット時代には当然のことですが、それ以前からデータを交換する時には「互換性」は最も重要なことだったのです。しかし、残念ながら、日本語環境では未だに「互換性」が実現されていません。例えば、Windowsで作成したファイルをMac OS上で開くと、一部の記号文字が化けたりするのは有名です。最新版のMicrosoft OfficeではMacintosh版にWindows互換のフォントを同梱するなどして文字化け対策をしていますが、完全ではありません。これらは全てMac OSとWindowsのフォントの一部に「互換性」がないからなのです。
- これはMacintoshユーザにとって非常に重要なことです。日本においてMacintoshのシェアが低下傾向にある最大の原因がMicrosoft Officeだからです。日本のオフィスではほとんど100%近いシェアを持っているビジネス統合ソフトはMicrosoft Officeです。しかし、このMicrosoft OfficeのWindows版とMacintosh版との互換性が完全ではないということは、企業は安心してMacintoshを導入できないわけです。さらに、日本の家庭用パソコンの多くは会社員が自宅で仕事をするために購入されています。この状況ではWindows版のMicrosoft Officeがプリインストールされているパソコンしか購入されないわけです。もちろん、日本で発売されているMacintoshにはMicrosoft Officeがバンドルされているものがないので最初から選定対象にならないということが最大の問題ではあります。
- しかし、Unicodeになれば、それらが解消されるのではないかという希望が見えてきたので、私もいろいろ調べてみる気になったのです。現実にはそれほど楽観できる状況ではないのですが、希望がないわけではありません。それらについてこのページで書いていければと思います。
文字コードとは
- さて、フォントといってもいろいろあります。例えば、フォントの形式もその一つです。ビットマップフォントやPostScriptフォント、TrueTypeフォント、OpenTypeフォント、……。それらも今後勉強していくつもりですが、まずは文字コードから始めたいと思います。
- 文字コードとはJISコード、シフトJISコード、Unicode、……というもののことです。ただ、文字コードと呼ばれるものには2つあります。これらを区別するのは難しいのですが、そういうもののようなので、私も区別をしようと思います。本当はこのあたりを簡単に説明しようと試みたのですが、基本を曖昧にすると結局のところ良くわからなくなってしまうのです。この原稿がなかなか完成しなかったのもそれらを大幅に書き足しをしていたからです。
- さて、文字コードの1つ目は文字のコード表です。正確には「符号化文字集合」と呼ばれるもので、文字のコード表のことです。文字コード表には文字がたくさん並んでいるのですが、それぞれに符号(番地のようなもの)がふられています。それで「符号化文字集合」と呼ばれるのです。
- そして、2つ目はその呼び出し方法です。これは「エンコーディング法」と呼ばれるもので、各種文字コード表を切り替えたり、該当する文字を選択する方法のことです。つまり、文字にふられている符号を元に文字を特定しコンピュータの処理にまわすのです。
- この2つは一体になっていても良さそうなものですが、コンピュータ自体がアメリカで生まれた欧文対応のものであり、それに日本語処理を追加したためにややこしいことになっています。つまり本来はアルファベットを中心に処理するべきシステムに、ひらがな、カタカナや漢字などを処理させるために多くの工夫がされているのです。つまり、Unicodeと言っても「符号化文字集合」の場合と「エンコーディング法」の場合があり得るわけです。このあたりは後ほど説明します。
- まずは「符号化文字集合」と呼ばれる文字コード表から説明していきましょう。
ASCIIコード
- さて、英語のアルファベットは26文字しかありません。大文字小文字で52文字、数字を加えても62文字です。さらに、記号を加えても127文字を超えません。ですから、文字にコード番号を割り当てたとしても128=27で十分なのです。これがASCIIコードです。このASCIIはアスキーと読みます。American national Standard Code Information Interchangeの略で日本語に訳すとアメリカの情報交換用の標準コードというものです。欧米文字は1バイト文字と呼ばれるのですが、実際には1バイト=8ビットではなく、7ビットのものもあるのです。
- このASCII文字は全部で94文字あります。7ビットなのに128文字ではないのは0〜31までは制御コード、32はスペース(space)、127は抹消(delete)に決められたので、残りが94文字ということなのです。
|
ASCIIコード |
- あれっ、32のスペース(space)と127の抹消(delete)も制御コードではないの?と思った方はほぼ正解です。厳密にはスペース(space)は文字、抹消(delete)は制御コードです。ちょっと考えればわかりますね。抹消を入力すれば文字を削除するという制御が行われますが、スペースを入力してもスペースが入るだけで何ら制御らしいことは行われていません。しかし、あえてこの2つを別に説明しているのには意味があります。それは後ほどわかると思います。
- さて、専門書や参考にしたホームページにはこの制御コードの集まりを「CL」、文字の集まりを「GL」と書かれています。これは何のことでしょう。「C」はControl Characterの頭文字、「G」はGraphic Characterの頭文字です。コンピュータの世界ではこの2つを同じCharacter(文字)として扱い、区別をしていません。ただ、その役割が制御なのか、画として表示されるかという違いがあるだけなのです。
- 「え」という文字に「絵」ではなく、「画」を使ったのには意味があります。文字は記号にあるような「絵文字」とアルファベットや数字、かな文字、漢字などがあります。「絵文字」だけではなく、全ての文字が対象なので「画」という文字を使ってみました。
- ちなみに、Control Characterは制御文字や制御コード、Graphic Characterは図形文字などと訳されています。図形文字といっても先に書いた通り、絵文字だけでなく全ての文字を示しています。また、「CL」「GL」の「L」については後で説明します。
- ここで、ASCIIコードの一覧表を見てください。本当は横一列の表にしたかったのですが、見づらいので16文字で折り返した表にしてみました。この「16文字で折り返す」ことには意味がありますが、それは後にわかると思います。さて、ASCIIコードは94文字なのですが、これは先に述べた通り「符号化文字集合」の文字数が94ということです。つまり、スペース(space)や抹消(delete)は含まれていません。また、当然ながら、他の制御コードも含まれません。下図にはコードの0〜127まで全て載せてありますが、ASCIIコードはグレーの部分の94文字になります。制御コードについては後に説明します。
|
ASCIIコード |
- ちなみに、このASCIIコードがインターネットの基本になっています。インターネット上のサーバはこのASCIIコードを受け付けるようにできているのです。
ISO 646(IRV)
- このASCIIコードをベースにした国際規格ISO 646というものがあります。ISOとはInternational Standard Organaizationの略で国際標準化機構のことです。日本語の文字コードもこのISO 646に準拠しています。これはASCIIコードを各言語がローカライズする際の決まり事と考えれば良いでしょう。つまり、ISO 646のアメリカ英語版はASCIIコードそのものなのです。
- なぜISO 646が生まれたのかというと、ASCIIコードはあくまでもアメリカ英語用なので、そのままでは他の欧文圏では使いにくかったからです。欧文圏の言語はもともとはラテン語から発展したものですが、発展の過程でさまざまに姿を変えています。アメリカ英語のアルファベットは26文字ですが、アクセント記号などがつく言語もあります。
- また、アメリカの通貨単位はドル($)ですが、他の国ではそれぞれの通貨単位を持っています。例えば、同じ英語圏でもイギリスではポンド(£)です。当時は欧州統一通貨のユーロ(ロ)などなかったので、他の欧州圏の各国の通貨記号が必要だったのです。それゆえ、アメリカ以外の国では各言語に必要な文字や通貨記号などの独自の記号などを追加したいと思ったわけです。
- 余談ですが、今ではユーロ記号をどうやって入力するかが問題になっています。今さら1文字増やすというのも大変なのです。AppleはUnicodeにいち早く対応することでこの問題を解決しました。Mac OS 8.5からはユーロ記号を入力可能になっているそうです。しかし、私の使っているMac OS 8.6Jでは日本語フォントを使用している時にはユーロ記号は入力できません。さて、話を戻しましょう。
- つまり、ASCIIコードをベースにして、その内の14文字を各言語毎でローカライズ可能と定めたのがISO 646なのです。欧州各国では言語毎にウムラウトなどのアクセント記号付き文字(ёなど)を割り当てています。
- しかし、アクセント記号付き文字は14文字には収まらないのです。私は第二外国語にドイツ語を取ったのですが、ウムラウト以外は良く覚えていません(笑)。ただ、確かに大文字小文字をあわせるともう少しあったような気がします。
- そのため、ISO 646では「文字合成」が認められています。もちろん、1文字でアクセント記号がついている文字もあるわけですが、別にアクセント記号のみを用意しておいて合成するのです。ただ、アクセント記号は文字の上や下につくので連続して入力しても合成できません。そのため、BSという制御コードを使っています。
- 具体的にどうするかですが、原理はタイプライタと同じです。まず、「e」を入力し、「BS」で1文字戻り、次に「ャ」を重ね打ちするのです。そうすれば「ё」になりますよね。
- さて、下図はISO 646のベースになるIRVです。制御コードもあわせて載せていますが、実際にはASCIIコードと同じく94文字の部分がISO 646(IRV)になります。
|
ISO 646(構造はASCIIコードそのもの) |
|
ISO 646(IRV) |
- IRVはInternational Reference Versionの略で、文字通り基準となる文字コード表なのですが、ASCIIコードそのものです。そして、ローカライズ可能な文字は黄色の部分になります。薄い黄色部分の2文字は「#」または「£」、「$」または「?」の選択になっています。また、残りの12文字は自由に設定できるようになっています。
- 私のMac OS 8.6Jで入力できる文字には限りがあります。そのため、この「$」に代わる文字を入力できません。そのため、「?」と表現しましたが、ここには「◇に毛が生えたような記号」が入ります。決してブラウザが文字化けしているわけではありません。この記号はCurrency Signというものらしいのですが、私には意味不明の記号です。他の言語版も示したいのですが、同様にアクセント記号などが入力できないのであきらめました。
- 私も文字を表すために画像ファイルにするなど工夫はしたのですが、入力できなければどうしようもありません。まあ、Mac OSの場合にはLanguage Kitを追加インストールすれば可能になるのでしょうが、私の使用しているMac OS 8.6Jに対応しているLanguage Kitは別売なのです。Mac OS 9.xにはLanguage Kitが同梱されているのでアップグレードするのも1つの方法なのですが、諸事情により先送りにしています。それゆえ、このページではいくつかの文字コード表を載せることができません。これらの文字集合を見てみたい方は安岡孝一氏のページを参照下さい。多くの文字コード表があります。この方も文字コードの世界では有名な方です。安岡氏の「漢字袋」のページには多くの参考になる情報が詰まっています。
ISO 646日本語版
- もちろん、ローカライズされた文字は各言語版で異なっています。ちなみにASCIIコード(ISO 646のアメリカ英語版)で「」(バックスラッシュ)になっている部分はISO 646の日本語版では「\」になっています。日本語版のMS-DOSやWindowsなどで「c:\abc\def\123.txt」などと表示されるのがその名残です。当然ながら英語版のMS-DOSやWindowsでは「c:abcdef123.txt」と表示されるわけです。
- 同じく、ASCIIコードの「~」もISO 646の日本語版では「‐」になっていたりするそうです。ただ、私のMac OS 8.6Jの文字セットではASCIIコードと同じ「~」になっているので確認はしていません。もしかすると単に私が英語版のキーボードを使っているからかもしれません。ちなみに、「」は「オーバースコア」あるいは「オーバーライン」、「~」は「チルダ」と読みます。「~」はホームページのトップページの所に使われているので知っている人も多いでしょう。例えば、このページのURLは「http://www.bekkoame.ne.jp/~t-mattsu/font/font1.html」になりますが、確かに「~」が入っています。これはWebサーバに多く使われているUNIXというOSでは「~」がログインしたときのホームディレクトリを表す記号であるからです。
- さて、ISO 646の日本語版を見てみましょう。制御コード部分は読み飛ばしてください。濃い紫色の2文字が日本語版としてローカライズされた部分です。
|
ISO 646日本語版 |
- ちなみに、ISO 646の日本語版はJIS X 0201として規格化されています。ちなみに、ASCIIコードもアメリカではANSI X3.4として規格化されています。ANSIはAmerican Nataional Standards Instituteの略です。まあ、元祖のASCIIコードを元に作られたISO 646をベースにANSI X3.4が作られたわけはないので、後付けでつじつまを合わせただけなのでしょうが、興味深いところです。さて、JIS X 0201については後述します。
拡張7ビットコード
- しかし、14文字のローカライズでは不十分だったので、ISO 646は拡張されました。94文字のアルファベットやアクセント記号付き文字(ёなど)に加えて、罫線や記号(├、┬、、±など)、ギリシャ文字(α、βなど)などが追加されたのです。
- これは文字数が足りなかったということもあるのですが、ISO 646のローカライズ可能な部分にあった、{、}、[、]、などの括弧が最大の原因だったそうです。プログラムには条件文や関連する部分をグループとして囲う場合があるのですが、その際にこれらの括弧が使われるのです。ところが、言語毎にこの括弧の部分がローカライズされたので、使用言語が違うとプログラムが読めなくなってしまったのです。つまり、プログラム自体は言語を問わず同じ規則で書かれているのに、文字コードが原因で文字化けしてしまったというわけです。もちろん、プログラムが動かなくなったのは言うまでもありません。それでは困るのでプログラム作成に問題がないような拡張が必要になったのです。
- さて、その拡張方法は2つありました。第1はもう1つISO 646と同じ入れ物を作って2階建て構造にするものです。これによりISO 646と完全に互換性が保たれています。拡張部分も同じ7ビットコードで、0〜31と127は制御コード、32はスペース(space)という形式も同じです。そのため、拡張部分に追加されたのは94文字にとどまりました。これが拡張7ビットコードです。この場合、ISO 646にあたる部分は統一したIRV(つまり、ASCIIコード)を使い、残りの94文字部分に拡張すべき文字・記号を再度登録し直したようです。この拡張7ビットコードから文字の合成は廃止されています。94文字あるので合成する必要がなかったのでしょう。
|
拡張7ビットコード |
- そのため、この拡張部分はISO 646と同じように各言語毎にローカライズされたものになっています。日本語版ではここに1バイトのカタカナ(俗称:半角カタカナ。通称:JISローマ字、JISラテン文字)が置かれています。ただ、日本語版ではISO 646にあたる部分もローカライズされたままになっています。詳しくは次の第2の拡張であるISO 8859で説明します。
- 実はUNIXの世界で使われているEUCという文字コードでは「半角カタカナ」は2バイトで表されるそうなので、「1バイトカタカナ」という表現も正しくないようです。私はEUCについて良く知りませんので勉強中ですが、他に適切な表現がみつからないのが実状です。正しい表現が見つかるまでは「1バイトカタカナ」と表現させてください。
- ちなみに、この拡張7ビットコードを使用する際には「2つの文字コード表(文字集合)のどちらなのかを先に指定する」と「文字コードを指定する」の2段階のプロセスが必要です。このような文字コード表の切り替えという方法はこの後も使われていくことになります。
- また、先に94文字と書きましたが、拡張部分については、後に32のスペースと127の抹消にも文字を置くことが許可されましたので、96文字まで使用可能になっています。先のASCIIコードの説明からスペース(space)と抹消(delete)を別扱いしてきたのはこういうわけだったのです。よく94文字集合とか96文字集合と呼ばれるのはこのスペースと抹消の2文字の扱いが違うことによるのです。
ISO 8859
- さて、ISO 646の第2の拡張は8ビット化です。コンピュータの処理能力も上がってきたので8ビット化しても耐えられるようになってきたということです。この8ビットコードを簡単に説明するならば、先ほどの拡張7ビットコードを横につなげたものです。これは国際規格になりISO 8859と呼ばれています。
|
ISO 8859 |
- さて、「あれっ?7ビットコードを2つつないだら14ビットではないの?」と思うのは間違いです。7ビットは27=128ですし、8ビットは28=256です。つまり、7ビット+7ビット=128+128=256=8ビットなのです。このあたりは慣れですが、10進数のように10+10=20になると考えてはいけないわけです。2進数の場合は10+10=100というように桁が上がるのです。
- この8ビットコードの中身は先の拡張7ビットコードと同じです。ですから、同じく8ビットの前半部分はASCIIコード、後半部分は先の拡張7ビットコードと同じく各言語毎に拡張されたものなので、ISO 8859自体に各言語版があることになります。そのため、使用する場合にはどの言語版かを選択する必要があります。ここで間違えると欧米文字でも化けてしまうのです。
- それらは、後ろに「-1」、「-2」と番号を振られて区別されています。それらはウェブブラウザの文字コード設定のところに見ることができます。そう、インターネットブラウザは8ビットコードをサポートしているのです。これについては後ほど説明しましょう。
バージョン |
言語 |
別名 |
備考 |
ISO-8859-1 |
西欧ラテン語 |
Latin1 |
|
ISO-8859-2 |
東欧ラテン語 |
Latin2 |
|
ISO-8859-3 |
南欧ラテン語 |
Latin3 |
エスペラント語 |
ISO-8859-4 |
北欧ラテン語 |
Latin4 |
|
ISO-8859-5 |
キリル文字 |
|
ロシア語 |
ISO-8859-6 |
アラビア語 |
|
|
ISO-8859-7 |
ギリシャ語 |
|
|
ISO-8859-8 |
ヘブライ語 |
|
|
ISO-8859-9 |
トルコ語 |
Latin5 |
|
ISO-8859-10 |
北欧ラテン語 |
Latin6 |
Latin4の改訂版 |
ISO-8859-11 |
タイ語(予定) |
|
|
ISO-8859-12 |
インド語(予定) |
|
|
ISO-8859-13 |
ラトビア語 |
Latin7 |
|
ISO-8859-14 |
ケルト語 |
Latin8 |
|
ISO-8859-15 |
西欧ラテン語 |
Latin9 |
Latin1の改訂版(ロ記号を追加) |
ISO-8859-16 |
東欧ラテン語 |
Latin10 |
Latin2の改訂版 |
現在のISO-8859の一覧 |
- また、お気づきの通り、ISO 8859には日本語版は存在しないようです。日本語版は先に説明した通り、ISO 646にあたる部分も2文字ですがローカライズされたままになっています。そのため、厳密にはISO 8859には準拠していないのです。ですから、この8ビット文字コードはJIS X 0201として日本では規格化されているのですが、ISOには登録されていないようです。
- さて、先の拡張7ビットコードと同じく、ISO 8859は後に拡張部分である右半分の160のスペース(space)と255の文字削除(delete)にも文字を割り振ることができるように改定されたので、94文字に2文字加えた96文字を追加できるようになりました。
- さて、ここで「CL」、「CR」、「GL」、「GR」の説明をしておきましょう。ASCIIコードやISO 646は7ビットコードなので「CL」と「GL」しかありませんが、8ビットコードには「CL」、「CR」、「GL」、「GR」の4つのエリアがあります。これは、8ビット化されたことにより制御コード部分(Control Character)と文字部分(Graphic Character)が2つずつになったからです。拡張7ビットコードの場合は文字のコード表が別になっていたので、「CL」が2つ、「GL」が2つで良かったのですが、8ビットの1つの文字コード表になったのでそれぞれを区別する必要があるのです。区別は簡単で、見た目の位置で左側を「L」=Left、右側を「R」=Rightとしているだけです。前述の通り、「GL」は94文字ですが、「GR」は96文字まで割り当てることが可能です。
- この「CL」、「CR」、「GL」、「GR」については後にもう少し詳しく説明します。
[(その2)][(その3)][参考文献]
[Macintosh 雑記帳のトップページ][日本語フォントについて]
このページはリンクフリーです。ただし、商用サイトからのリンクはお断りします。
また、著作権を放棄しているわけではありませんので無断引用もお断りします。
そんなにたいしたページではありませんが…(^^;)
このページの内容についてのご意見、ご指摘などありましたらt-mattsu@sag.bekkoame.ne.jpまでメールでお願いします。(@を半角文字に変えてください)
Copyright (C) 2002 T.Matsumoto. All rights reserved.
このページにでてくる製品名や名称は各社の商標や登録商標です。