たまりば

  パソコン・インターネット パソコン・インターネット  三鷹市 三鷹市

ASCIIと仮名を1バイトに収める / 小書き仮名の性質について
2016年06月05日 03:28

昔ゼルダの伝説夢をみる島というゲームがあった。名作だ。
そのテキストデータのダンプがネットで見つかるのだが、小書き仮名のデータがおかしい。
たとえば「マダムニャンニャン」というキャラクターがいるのだが、これが「マダムニゃンニゃン」となっている。
「へ」と「り」をカタカナひらがなで統合するのは常套手段だが「ゃ」は明らかに形が違う。
念のためゲーム中の表示を確認してみたが、やはりどう見ても「マダムニャンニャン」である。
データを作ったのは外国人だろうし何かミスがあったのだろうか…。

それはさておき。

先日なんとなくポメラのようなキーボードで文字を打って保存できる機械を自作することを考えていた。
漢字は変換システムの自作は困難だしデータ(辞書・フォント)の容量も食う。とりあえずASCIIとひらがなカタカナだけで考えよう。
そうすると1文字に必要なデータ量は…
ASCII: 95文字
ひらがな: 83文字 (ぁーん)
カタカナ: 84文字 (ァーヴ)
他: 「ー」「改行」「null文字」
この辺までは最低限必要だろう
あとできればキーボードから打てる記号くらいは入れたい。
つまりASCIIとかぶるものを除いて少なくとも「、。・「」」の5文字、あと「\,¥」と「~,~」を同一視するかは微妙。

最低限で考えても95+83+84+3=265文字、惜しくも1バイトに収まらない。悔しいので要らない文字を削って収めよう。
まず「ゐゑヰヱ」は現代語を書くには不要だ。「ヘベペリ」はかなカナを統合する。まだ足りない。ひらがな「ゎ」も要らないか。
これで256文字。ギリギリで収まったがやはり記号が欲しい。
あと削れる文字は…ひらがなの「ぁぃぅぇぉ」も削るか…

と思っていたとき気づいた。
小書き仮名は普通に使う分には常に直前の文字と一体となって使われる。
であればかなカナの区別はデータ上には必要ない。表示時にだけひらがな/カタカナステートに応じて別の字形を出せばよいのだ。

そうすると「ぁぃぅぇぉっゃゅょ」で9文字も空く。「ゎ」も消さずに済む。
これで記号も入れられそうだ。めでたしめでたし。

さてそれで思い出したのが冒頭のゼルダの伝説夢をみる島。
あれは同じ仕組みで文字コードを圧縮していたのではないか。
あのゲームは表示テキストに混じって人物やアイテムなどのアイコンが使われる。それで文字数が1バイトに収まらなくなって小書き仮名を統合し、それがテキストダンプに現れていたのではないか。

…と、そう思ったのだが、見なおしてみるとおかしいのは「ャ」だけで「ッ」「ュ」「ョ」は正常であった。(ぁぃぅぇぉは無い)
統合するなら全部統合するだろうから、やはりただのミスだったのだろう。「ゃ」と「ャ」は形が似ているので見間違えたんだろうな。