JIS X 4081 UTF-8 extension

JIS X 4081の文字コードをUTF-8にしたvariantの案およびその実装例。

背景

JIS X 4081は少なくとも日本語の辞書を扱う限りにおいてはよくできているとは思いますが、収録可能な文字がJIS X 0208の範囲内というのは悲しいので無理矢理ユニコードを収録してみました。

方針

拡張は最小限に

JIS X 4081からあまりに乖離するとベースにする意味がなくなるので、最小限度の拡張を心がけています。 機能を追加するのが面倒ともいいます。

特徴

テキストをUTF-8で収録

テキストおよび検索語を従来のJIS X 0208に変えてUTF-8で収録を行います。

従来のEPWING用のツールとの互換性

CATALOGSファイルやHONMONファイルの構造等はJIS X 4081 / EPWINGとある程度互換性を持っています。 この為、未対応のツールでアクセスした場合には、テキストやインデックスが存在しない書籍として扱われ、致命的なエラーを起こしにくくしています。

規格

基本的にはJIS X 4081 / EPWINGの実装に従いますので、以下はその差異について記述しています。

CATALOGSファイル

CATALOGSファイルに記すEPWINGのバージョン (CATALOGSファイルの4バイト目) を10 (0x0A) とします。 既存のツールへの対策として、書籍のタイトルについては従来通りJIS X 0208で記述します。

HONMONファイル

書籍構成要素

従来に変わってテキストをUTF-8で収録するインデックス・テキストとして、以下の書籍構成要素のIDを定義します。

テキスト

本文・メニュー・著作権情報に使用するテキストはUTF-8を使用します。 この為、1文字は1~4バイトの可変長な文字列で表現されます。 U+001F以下の文字は使用しません。 特に0x1Fで始まるバイト列は記述子として予約されているので注意が必要です。

記述子

JIS X 4081 / EPWINGの記述子をそのまま使用します。

外字

JIS X 4081での方法ではUTF-8文字とは共存できない為、記述子を用いて表現します。 半角外字は0x1F 0xD0 0xXX 0xYY、全角外字は0x1F 0xD1 0xXX 0xYYとします。 0xXX 0xYYはEPWINGで実装されている外字の指定方法に従って外字を指定します。 つまり、0xXX 0xYYはそれぞれ0xA1-0xFE, 0x21-0x7Eの値となります。

検索語の正規化

インデックスに登録する検索語は、単純な文字から文字列への置き換えのテーブルによって正規化を行います。 また、書籍を作成するソフトは作成時に用いたテーブルを書籍に収録します。 正規化のアルゴリズムの概略は以下の通りとなります。

  1. 検索語からU+0000~U+0020の文字を取り除く。

  2. テーブルに従って文字列を置換する。

  3. 置換の結果、検索語が0文字になった場合はU+0000~U+0020の文字を削除した時点の文字列を検索語とする。

  4. 後方一致検索時には (バイト単位ではなく) 文字単位で検索語を逆順にする。

  5. 検索語が255バイトを超える場合は、超えないように (バイト単位ではなく) 文字単位で切り詰める。

正規化テーブル

書籍作成時に使用したテーブルをHONMONファイルに埋め込みます。 テーブルの内容は以下の通りです。 (数値は全てビッグエンディアン。)

置換前の文字列はUTF-8で1文字とします。 検索語から取り除かれる文字は置換後の文字列を0文字にします。 要素は置換前の文字のコードポイントが小さいものから順番に収録します。

TODO

実装例

FreeUWING

FreePWINGを改造してUTF-8対応にしたもの。

EB Library with UTF-8 support

EB Libraryを改造してUTF-8対応にしたもの。

更新履歴

2009/04/21 公開。

written by Kazuhiro Ito (mailto: mailto)

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!