2007/06/01

文字コードについて

タイプライターが好きで、小学生のころから Olivetti ※のタイプライターのキーを叩いていた。母親が会社で使っていたのがこの写真にある和文タイプライター。英文タイプライターは、キー配列はパソコンとほとんどいっしょ。和文タイプライターは、構造からしてまったく違う。写真に見える白い部分に升目が引いてあって、その升目の中に小さな文字が印刷されている。盤面に黒いノブのようなものが写っているけど、これで盤面の文字を探す。打刻したい文字がみつかったら、そこでノブを押す。そうすると、その文字が紙に印字される……というモノ。ノブをカチッと押す(現代的な表現で言えばクリックする)と、その活字を拾って、インクリボンに向けて活字を叩き付ける……という仕掛け。

和文タイプライターの盤面に整然と並んでいる文字たちのことを考えていると、文字コードの配列表を連想する。コンピュータで記述する文字はすべてなんらかの文字コードに従って、ID とでもいうべきもので整理されている。ウェブブラウジングが一般化する前は、ワープロを使ったりするときも、文字コードを気にしたりすることはなかった。強いて言えば、Windows で作成した文書を Macintosh で開くと、一部の文字が文字化けするなんてことぐらいだろうか。最近はそんなことも少なくなったけど、ウェブブラウジングの普及以降、ブラウザで開いたページがまるっきり文字化けしていて読めない、そんなときはブラウザのメニューから文字コードをいじってみたり……なんていう経験は誰しも一度はあるんじゃないだろうか。Shift JIS となっていたものを、EUC-JP に変更したら読めた……っていう経験。

どんな風に文字が整理されているかと言うと、こんな感じ。「亜」という字であれば、16 区の一列目にいる。Shift JIS だったら 16 区は、889E。「亜」の字が配置されているのは、+1 の列。これを組み合わせて、889E + 1 = 889F ※※。EUC-JP だったら、同じ 16 区で、同じく +1。でも、基礎となる数字が B0A0。なので、「亜」は、B0A0 + 1 = B0A1。つまり、同じ「亜」の字であっても、

  • Shift JIS の「亜」:889F
  • EUC-JP の「亜」:B0A1
……なので、コンピュータの中ではまったく別の ID で管理されている。いわば、別の暗号表に割り当てられていると言っていい。そのため、暗号表(文字コード)が違っていれば、「ちゃんと解読できない」→「文字化けする」……という状況が発生するわけだ。

この B0A1 とかって、どこかで見たことない? 例えば、Yahoo! JAPANとかで検索したときにブラウザの URL 欄でよくわからない文字列がごちょごちょっと書かれているアレ。Yahoo! JAPAN のトップページから「亜」と検索してみる。すると、URL 欄に表示されるのが、

http://search.yahoo.co.jp/search?p=%B0%A1&ei=euc-jp

……こんな文字列(説明に不要な部分は省略してある)。この %B0%A1 が「亜」の B0A1。後ろの「ei=euc-jp」は、「検索文字列は、EUC-JP の暗号表で暗号化されてますよ」と言う意味。これをサーバが受け取って、EUC-JP の暗号表で解読する。excite だと、

http://www.excite.co.jp/search.gw?search=%88%9F

……こんな感じ。これは言うまでもなく、Shift JIS の 889F。

最近は、UTF-8 なんて文字コードもよく見かける。Google なんかは、どのページも UTF-8 で書かれている。そんな Google で検索したりすると、

http://www.google.co.jp/search?q=%E4%BA%9C&lr=lang_ja&ie=utf-8&oe=utf-8

……と表示される。さっきからの類推で行けば、%E4%BA%9C か。UTF-8 の文字コード表を参照すると、確かに E4BA9C とある。「ie=utf-8」は、Yahoo! JAPAN の「ei=euc-jp」が「検索文字列は、EUC-JP の暗号表で暗号化されてますよ」と言っているのと同様に、Google は、「ie=utf-8」で「検索文字列は、utf-8 の暗号表で暗号化されてますよ」と言っている(ちなみに oe は検索結果ページの文字コード指定)。試みに Google に検索文字列「亜」をShift JIS で送ってみる。

http://www.google.co.jp/search?q=%88%9F&lr=lang_ja&ie=shift_jis&oe=utf-8

さっきの検索結果と同じものが表示される。

UTF-8 は、新しい文字コードの規格で、これまでのShift JIS や EUC-JP と比較して、圧倒的に多数の文字を表の中に格納することができる。大雑把に言えば、Shift JIS や EUC-JP は、日本語の文字が担当範囲。UTF-8 は世界各国の文字が担当範囲。文字コードが UTF-8 だったら、同じページの中で、中国語、韓国語、日本語を同時に表示できちゃう(もちろんロシア語でもタイ語でも)。Yahoo! JAPAN は、長年文字コードを EUC-JP で統一してきていたけど、翻訳サービスなんかは、UTF-8。この理由も UTF-8 が多国語を扱えるというところにつきる。

こんな風に考えていくと、なんだかよくわからなかった文字コードなんてのもおもしろく思えたりしない?

おまけ:「亜」が URL の中で「%E4%BA%9C」(UTF-8)で暗号化されてるというのは、ここまでに説明したとおり、この暗号化を「URL エンコード」っていう。覚えておいてもいい用語かも。(07/06/04 追記)

※ Olivetti:イタリアのタイプライターメーカー。赤い Valentine っていうのが代表的な製品。こいつがなんともいえずスタイリッシュ。いまの Valentine は、プリンターなんかのメーカーになっちゃったけど、

※※889F:F は、文字ではなく、16 進数の数字。0123456789ABCDEF という順番。つまり、A は、10 進数だったら、11。なので、E は、15。15 + 1 = F = 16。

0 件のコメント: