パソコン文字モジ君との斗い
註:この話における「文字コード」とは「シフトJIS」のことです。
また、OSは Microsoft社のもの(WindowsやMS-DOS)においての話であることをお断りしておきます。
○前置き
以下の文章に進む前に、すこし私の仕事を説明する必要があるだろう。
私の職業はプログラマである。まだ成りたてであるが、それなりに働けているだろうと思う。とまあ、そんなことは措いといて。
いま私はとある企業の総合業務システムの作成を行うプロジェクトの一員として働いている。
このプロジェクトでは、システムの動作確認のために相手先で実際に業務で使っているらしいデータをもらってきているのだが、生のデータだけあっていろいろワケの分からないものやら笑っちまうようなデータ、コレはスゴいと思わず唸ってしまうようなデータなどが入っていて、見ていてかなり楽しい。この場でご披露できないのが残念である。
また、テストデータとしても非常に有効である。テストデータをすべて自分で作成する場合だと、どうしてもプログラム(自分?)の都合のよいデータばかりを作りがちである(注意していないと無意識にこうしちゃうんだなコレが)。だが、実際のデータ、しかも他人の作ったデータだとそのようなヒキョウなマネの介在する余地がない。そのため、予期せぬ不具合の早期発見になるのだ。
以下ではこのデータに悩まされた(笑わせてもらった?)経緯などを述べる。
○ナゾの横棒、現る
註:この文章で一番肝心となる「ある文字」は、もしかしたら機種依存文字かもしれません。お使いのマシンによってはその肝心の文字が正しく表示されない場合がありますがご了承ください。
#しかし、コレが出ないことには、おかしさは半減してしまうのだが...
それはある日のことだった。
できあがった検索ウインドウの動作確認のためにプログラムを走らせる。そして、きちんと抽出条件に合致するものだけを抜き出してくるかを検証する。
そのときのキーワードとして用いたものは「ホール」という言葉だった。条件なしで抜き出してきたときに「○○ホール」というものがけっこうな数あったので、まずはコレで確かめてみよう、と思ったためだ。とりあえず入力して検索を実行する。すると・・・なぜか5件くらいしか出てこないではないか。ざっと見ても30件以上は絶対あったはずなのだが。プログラムがヘンなのかとも思ったが、試しにキーワードを「ホ」で検索してみた場合は「○○ホール」というものも含め正しくデータを拾ってきている。
おかしいなー、と思いつつ、よくよくデータを見てみると、「ー」の文字がなんとなくおかしいような気がするのに気がついた。妙にヨコ長に見える。さらに、長音記号の「ー」は左側がはねているのに、その妙な横棒はただ一直線なだけである。と文章で説明するよりも実際に見てもらった方が早いだろう。以下にその違いを示す。
「ホール」:ふつうに入力した場合の文字
「ホ―ル」:モンダイの文字
どうだろうか。注意して見ればこのふたつが異なることがわかると思う。この「ホ―ル」という文字列をデータ上から直接コピーしてきて検索してみると「○○ホール」(正確には「○○ホ―ル」)というデータをきちんと拾ってくるではないか。
私は「この横棒はいったいなんなのだ」という疑問を抱いた。長音記号のようであるがそうではない、ハイフンとも違うようだ。
もしかしたら、コレはまったく別の記号なのではないか、私はそう仮定した。そしてさっそく調べてみることにした。方法は、VisualBasicの「イミディエイトウインドウ」上で以下のコマンドを用いることによって行った。
- print hex(asc("[調べたい文字]"))
このコマンドを実行すれば16進4ケタで文字コードを取得できる。文字の取得はデータに含まれるモンダイの横棒をコピーしてきて貼り付けることで行った。
その結果は以下のようになった。参考までに、似たような記号の文字コードおよび名称も記しておこう。
815B : "ー":長音記号(KATAKANA-HIRAGANA PROLONGED SOUND MARK)
815D : "‐":ハイフン(HYPHEN)
817C : "−":マイナス記号(FULLWIDTH HYPHEN-MINUS)
815C : "―":モンダイの横棒(HORIZONTAL BAR)
(2003/11/02追記)ハイフンのコードが違うとの指摘を受け、マイナス記号のことをハイフンとしていた誤記(と言うより、ハイフンという文字があることを知らなかった誤認)を修正しました。ご指摘くださったTさん、どうもありがとうございます。
つまりこの「モンダイの横棒"―"」は、長音記号でもマイナス記号でもない、まったく別のナゾの"HORIZONTAL BAR"という文字であったのだ。やっぱりか、私はそう思った。
このように、このモンダイの横棒は「似てるけど別の記号」であることが判明したわけだが、そうなると新たな疑問が出てくる。
この横棒はいったいどうやって入力すればよいのだろうか。
単純に入力しようと思っても、どう変換しても出てこないのだ。結局、記号一覧表(ATOKなら文字パレット)などで直接叩くしかないのだ。しかし、これではキーワードを入力するたびにこのような操作を行わねばならないため、非常に面倒である。
困ったことに、このモンダイの横棒はほかにもあちこちで出没しているようだ。カタカナで表される言葉には長音記号がよく用いられているため、このモンダイの横棒も必然的にかなりの割合で出てくる、というわけだ。モノによっては7文字中3文字がこの横棒だったりするものもある。
このように本当に頻繁に出てくるため、この横棒が必要となる機会もかなり多いはずだが、だがらといってこのモンダイの横棒の入力がラクになるわけではない。一見些細な違いに見えるのだが、実は相当に根の深い問題である。
ニンゲン様にはどうでもよいようなことでも、コンピュータにとってはそうではないらしい、ということのわかりやすい一例を見た思いである。
それにしても、私が一番不思議なのは、いったいどうやってあんなにたくさんの箇所に入力したのだろう、ということである。非常にナゾである。
(1999/09/25追記)と言っていたら、MS-IMEでなら直接入力できることが判明した。方法は至って簡単。「ー」の記号だけを単独で変換すればよいだけであった。いやー、そこまで頭が回りませんでした。情報を寄せてくださったYさん、どうもありがとうございます。
1999/09/04
○漢数字は整列がお嫌い
それはある日、やっぱり検索ウインドウでの出来事だった。
データベースから拾ってきたデータを眺めていると、一高(岩手県立盛岡第一高等学校・以下同じ)から四高までが並んでいる箇所に出くわした。おお、見事に1から4まで並んでいるな、と思いつつよく見たらキチンと1から4の順番で並んでいない。一高の次に三高がある。そして四高のあとに二高がある。プログラムを見直してみても別におかしいところはないようだ。
ただ、ひとつ思い当たるフシがある。データの並び替えは単純に文字列の比較、すなわち文字コードの比較によって行われている。つまり、(プログラムに誤りがないとすれば)人間から見ればムチャクチャな並び方に見える場合でも、コンピュータから見ればこれはこれで正しく並んでいるのだ。このことを推し進めて考えると、漢数字の文字コードの順序は数字の大きさ順ではない、と言えるのではないだろうか。
そこで、今回もまた例のコマンドを用いて文字コードを調査してみた。結果を以下に示そう。
1(一):88EA
2(二):93F1
3(三):8E4F
4(四):8E6C
5(五):8CDC
6(六):985A
7(七):8EB5
8(八):94AA
9(九):8BE3
10(十):8F5C
やはり思ったとおりであった。調査結果を見ると、漢数字は文字コードが数字の大きさどおりに並んでいないことがわかる。
なお、文字コードの順に並べると、
1(一):88EA
9(九):8BE3
5(五):8CDC
3(三):8E4F
4(四):8E6C
7(七):8EB5
10(十):8F5C
2(二):93F1
8(八):94AA
6(六):985A
順番は[1<9<5<3<4<7<10<2<8<6]
となる。
いったいどういう規則で並んでいるのだ、と思ったのだが、きっと何らかの規則性があるはずだと思い、その規則性を見出そうとATOK12の文字パレットを起動してみた。
すると疑問は一発で氷解。なんのことはない、シフトJISコードにおいて文字の並び順は「アイウエオ順」なのだった。そういえばそうだったような記憶があるが、この作業をするまですっかり忘れていた。
ホントに五十音順だったかどうか、試しに漢数字たちにフリガナを振って見ようではないか。
1(一):88EA:イチ
9(九):8BE3:ク
5(五):8CDC:ゴ
3(三):8E4F:サン
4(四):8E6C:シ
7(七):8EB5:シチ
10(十):8F5C:ジュウ
2(二):93F1:ニ
8(八):94AA:ハチ
6(六):985A:ロク
見事に五十音順である。
五十音順というのも確かにちゃんとした規則に則って並んでいるわけだが、数字の大きさとまったく無関係になっているのには素直にうなずけないものがある。かといって、数字だけを例外的に扱うと、ほかとの整合がとれなくなってしまう危険性がある。やはりこういった規則付けはシンプルな方がよいものであって、むやみに例外を設けることは賢明でない。
・・・これはこれでしょうがないのだろう。このあたりが、コンピュータの融通のなさの欠点だろうか。
1999/09/04
○三森健作さん事件
それはある日の出来事だった。
私は[見積検索]というプログラムの作成にとりかかった。まずフォームを作成して、そのフォームのタイトルを入れた。そのとき私は”みつもりけんさく”と入力して変換したところ、帰ってきた結果はまったく予期せぬものであった。それが「三森健作」さんだったのだ。
なんだコレ?どうしてこんなモノが出てくるのだ?。私はそのとき思いきり脱力してしまった。
「みつもり」という文字も「けんさく」という文字も何度も入力しているが、考えてみれば「みつもりけんさく」とこのふたつを一発で変換しようとしたのは今回が初めてだったような気がする。そんなわけで、きっと MS-IME97君の頭にはこの言葉の意味が判らずに、誰かの人の名前だと思ってしまったのだろう。久々に大ホームランの変換ミスであった。
試しに先輩のマシン(日本語変換は私と同じく MS-IME97)でもコレを試してみたところ、やはり同じく「三森健作」さんが登場してきた。MS-IME97をお使いの人はぜひお試しあれ。
それにしてもなあ...いくらなんでも人の名前ってェことはないだろう。オレは真剣(←ホントか)に仕事してんだぞ、ココは笑うとこじゃないのだ。
あまりにも見事な「誤」変換なので、敢えてこのままの状態を保持しておきたいと思った(←やっぱ真剣に仕事してないな)。
なお、自宅のマシンで使っているATOK12では「見積もり検索」と正しく出てきたことも記しておこう。
1999/09/04
(1999/09/25追記)
三森ファミリーにまた新たな人物が発見された。その名も「三森芽衣」ちゃんである。「みつもりめい」と読むらしい。もしかしたら、まだまだ三森ファミリーが隠れているかもしれない。MS-IME97を使っている人は探してみよう。