新・闘わないプログラマ No.68

厄介な文字コード


「インターネットの電子メールって、半角カナ文字を使っちゃ駄目だって言うけど、どうして?」
「うーん、そうだなあ。一番簡単な答えは『使ってはいけない』と決まっているから」
「あ? それじゃ全然答えになっていないじゃないか」
「そんなこと言ったって、そうなんだから仕方ないじゃないか」
「じゃあさあ、半角カナを使うとどうなるの?」
「うーん、そうだなあ。運がよければそのまま相手に届くだろうし、運が悪ければ、文字化けしてしまう。それも、いわゆる半角カナ文字から後ろ、改行まで全部文字化けしちゃうことがよくあるなあ」
「なんでそんな不便な決まりが出来たの?」
「『不便』? そう? いわゆる半角カナ文字なんて使わなくても別に困らないと思うんだけどなあ」
「でも、僕はカナ文字は、半角と全角を使い分けているから、通常の半分の幅のカナ文字が無いと困ってしまうんだよね」
「でもさあ、いわゆる半角カナ文字とそうでないのって、日本語の文字としたら同じもんだよ。そんなもん、書き分ける必要なんか、そもそも無いじゃないか」
「でも、幅の狭いカナ文字が必要な場合がどうしてもあるんだよね」
「あのさあ、なんか誤解していない? 幅がどうか、なんて本質的には関係ないんだから」
「へ? 半角カナ文字って、全角文字の半分の幅でしょ?」
「だからあ、そんなの決まっていないんだって。いわゆる半角カナ文字だからといって、どんな環境でも、半分の幅で表示される、なんてことはそもそも保証されていない」
「そーなの? ところでさあ、さっきから『いわゆる半角カナ』って言っているけど、なに? その『いわゆる』って」
「いいところに気付いたねえ。いわゆる『半角カナ』と言われているものが、実際には『半角』とは限らないから、そう言っているの。これは文字コードの話であって、文字の幅を現しているわけじゃ無いから、それを『半角カナ』と呼ぶのは変でしょ? 本来は『JIS X 0201 カナ』とでも呼ぶべき文字コードなんだけど、これじゃ知らない人も多いから、仕方なく『いわゆる』を付けて呼んでいるわけ。他にも、いわゆる半角文字を『1バイト文字』、全角文字を『2バイト文字』なんて言うこともあるけどね、これはコンピュータ屋さんには通りがいいかもしれない」

などという会話を時々することがあります。この問題、奥が深いから、話をしようと思えば、何時間でも出来てしまう、というテーマではあります。まあ、カタギの人(非コンピュータ屋さん)にとっては、どうでもいいような話なので、「インターネットのメールではいわゆる半角カナ文字はつかえないことに決まっているの!」で終わっちゃうことも多いですが。
ところで、「インターネットは半角カナは御法度」などということを言っている人をよく見かけるのですが、これはさすがに言い過ぎでしょう。確かに、電子メールやNetNewsの世界では、日本語を使う場合、ISO-2022-JPという文字コードセットを使いましょうね、ということになっているので、ISO-2022-JPに含まれない「JIS X 0201カナ」(要するに半角カナ)は使えない、というだけで。たとえば、Webの世界では、文字コードとしてShift JISも使えますし、そこで半角カナを使っても問題が無いはずです(よね? 確か)

私自身、別に文字コード関係は専門でもなんでもないので、あまり深くは知りませんし、なんかとんでも無い間違いを書いてしまいそうで恐いのですが(間違いがあったら、こっそり指摘して下さい)、でも、プログラマの中には、本当に何にも知らない人が多くて、困ってしまうことがあります。

日本語に関連する文字コードは、JIS(日本工業規格)で定められています。漢字も含む文字コードとしては、JIS X 0208(JIS漢字コード)がありますが、これが最初に制定されたのが1978年のことです。それ以前から、コンピュータによる日本語(漢字)処理というのは始まっていましたから、大手のコンピュータメーカーは独自で漢字コードを定めました。メインフレームの世界では、この漢字コードが今もなお使われているところがあって、メインフレームのプログラムは、結構いたるところでコード変換のルーチンを呼び出していたりして、結構大変だったりします。
大変といえば、仕事でやっていてどうしても避けられないのが「外字」ってやつです。JIS漢字コード表に無い漢字を表したい、という要求は非常に多いです。特に、人名の場合、別の字で代用することは出来ない、というような場合ですね。「内田百間(門構えの中は『日』ではなく『月』)」とか、「森鴎外(『鴎』の字の『メ』は本当は『品』)」とか、あとWebでよく見掛けた「トウ小平」とか、なんか情けないことになってしまいます。
で、これにはいつも頭を悩ましているわけです。
外字には、コンピュータメーカーが独自に定めた漢字コード表にあってJISには漏れているもの(メーカーはこれを無理矢理JISコード表の空き領域に割り当てていたりします)、あと、ユーザー側で勝手に作ったもの、があります。いずれにしても、閉じた世界で使っている分にはそれほど問題も起きないのですが、今のように、コンピュータシステムがネットワークで接続されていて、データがあちこちを飛び交うような場合、外字があるととたんに面倒なことが発生してしまいます。
うちのとこでも、ご多分に漏れず、外字で人名やら変な記号やらを取り扱っていたのですが、この情報をWebに乗せようとして困ってしまったことがあります。こういうことがあるので、私なんかは、どうしても別の漢字で代用したりすることが不可能な場合(人名で、相手に対して大変失礼、とか)以外は安直に外字を使わないように、いつも言っているのですが、どうもみんな聞き入れてくれないですね。外字があるために、標準的な文字コード変換ユーティリティが使えなくなってしまう、とか、それだけのために開発コストがすごく高くついてしまうこともよくあります。

外字にまつわる話と言えば、外字は、メーカーやらユーザーやらが勝手に文字を文字コードに割り当てますから、たとえば、画面とプリンタで外字の定義が違っていれば、画面で見た文字と全然別の文字が印字されてしまう、なんてことも起こり得るわけで、うちの職場でもいぜんありました。具体例はちょっと差し障りがある(ものすごく珍しい名字なので)ので書きませんが、ある人の名前を端末から入力した(外字を含む文字で)のですが、プリンタの方の外字の定義が異なっていて、とんでもない下品な名前に変換されて、そのまま発送されてしまいました。その後のことは……よく知りません。
インターネットの世界でよく見る外字の問題に、丸数字(「まる1」とか「まる2」とか○の中に数字があるやつ)の問題がありますよね。これ、もともとは確かNECのPC98で使われていた外字だったと記憶しているのですが、MS明朝とかMSゴシックとかのフォントにも入っていて、Windowsの世界では今なおよく見かけます。で、これが、Macintoshのシステム標準フォントのOsakaだと、(日)とか(月)とか(火)とかいう文字に化けてしまう、なんていう話があって、書いた方は単に箇条書きのつもりで丸数字を使ったのに、Macな人がそれを「一週間かけて、この箇条書きのとおりにやるんだ」みたいな勘違いをしてしまった、なんて話がありました。
いずれにしても、外字に頼っていると、ろくなことがない、という話です。

あ〜、もう時間が無いので今回はこの辺で終わります(←もっと、早くから準備しろよ)。半角カナの話はもうすこし突っ込んでやりたかったし、UNICODEの話もしたかったのですが……その辺はまたの機会に、ということで……ごめんなさい。

[前へ] [次へ]

[Home] [戻る]


mailto:lepton@amy.hi-ho.ne.jp