(57)【要約】【課題】  小容量のテーブルを用いて高速な文字変換を行うための文字コード変換装置を提供することを課題とする。【解決手段】  第１の文字コード系を第２の文字コード系に変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する文字コード変換テーブル（３０１）と、第１の文字コード系を複数のブロックに分割し、第１の文字コード系を第２の文字コード系に変換するために文字コード変換テーブルを索引検索するためにブロック毎に第１の文字コードとそれに対応する文字コード変換テーブル内のアドレスとの関係を記憶する第１のインデックステーブル（４０１）と、第２の文字コード系を複数のブロックに分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する第２のインデックステーブル（６０２）とを有する文字コード変換装置が提供される。【選択図】        図６
2006252330.tif 000002
【特許請求の範囲】
【請求項１】
第１の文字コード系を第２の文字コード系に変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する文字コード変換テーブルと、
前記第１の文字コード系を複数のブロックに分割し、前記第１の文字コード系を第２の文字コード系に変換するために前記文字コード変換テーブルを索引検索するために前記ブロック毎に前記第１の文字コードとそれに対応する前記文字コード変換テーブル内のアドレスとの関係を記憶する第１のインデックステーブルと、
前記第２の文字コード系を複数のブロックに分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する第２のインデックステーブルと、
第１の文字コードを入力し、前記第１のインデックステーブル及び前記文字コード変換テーブルを基に前記入力された第１の文字コードをそれに対応する第２の文字コードに変換する第１の変換手段と、
第２の文字コードを入力し、前記第２のインデックステーブル、前記第１のインデックステーブル及び前記文字コード変換テーブルを基に前記入力された第２の文字コードをそれに対応する第１の文字コードに変換する第２の変換手段と
を有する文字コード変換装置。
【請求項２】
前記第１の変換手段は、第１の文字コードを入力し、その第１の文字コードに対応するブロックのアドレスを前記第１のインデックステーブルから読み出し、前記読み出したアドレスを基に前記文字コード変換テーブル内から前記入力された第１の文字コードに対応する第２の文字コードを検索することにより、前記入力された第１の文字コードをそれに対応する第２の文字コードに変換し、
前記第２の変換手段は、第２の文字コードを入力し、その第２の文字コードのブロックに対応する第１の文字コードを前記第２のインデックステーブルから読み出し、前記読み出した第１の文字コードのブロックに対応するアドレスを前記第１のインデックステーブルから読み出し、前記読み出したアドレスを基に前記文字コード変換テーブル内から前記入力された第２の文字コードを検索し、その検索された第２の文字コードのアドレスを基に第１の文字コードを演算することにより、前記入力された第２の文字コードをそれに対応する第１の文字コードに変換する請求項１記載の文字コード変換装置。
【請求項３】
前記文字コード変換テーブルは、ブロック内の第１の文字コードに対応する第２の文字コードが１つも存在しないブロックが削除されている請求項１又は２記載の文字コード変換装置。
【請求項４】
第１の文字コード系を第２の文字コード系に変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する第１の文字コード変換テーブルを準備するステップと、
第２の文字コード系を第１の文字コード系に変換するために第２の文字コードとそれに対応する第１の文字コードとの関係を記憶する第２の文字コード変換テーブルを準備するステップと、
前記第１の文字コード系を複数のブロックに分割し、前記第１の文字コード系を第２の文字コード系に変換するために前記第１の文字コード変換テーブルを索引検索するために前記ブロック毎に前記第１の文字コードとそれに対応する前記第１の文字コード変換テーブル内のアドレスとの関係を記憶する第１のインデックステーブルを生成するステップと、
前記第２の文字コード変換テーブルを基に、前記第２の文字コード系を複数のブロックに分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する第２のインデックステーブルを生成するステップと
を有するテーブル生成方法。
【請求項５】
第１の文字コード系を第２の文字コード系に変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する文字コード変換テーブルと、
前記第１の文字コード系を複数のブロックに分割し、前記第１の文字コード系を第２の文字コード系に変換するために前記文字コード変換テーブルを索引検索するために前記ブロック毎に前記第１の文字コードとそれに対応する前記文字コード変換テーブル内のアドレスとの関係を記憶する第１のインデックステーブルと、
前記第２の文字コード系を複数のブロックに分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する第２のインデックステーブルとを用いて文字コード変換を行うためのプログラムであって、
第１の文字コードを入力し、前記第１のインデックステーブル及び前記文字コード変換テーブルを基に前記入力された第１の文字コードをそれに対応する第２の文字コードに変換する第１の変換ステップと、
第２の文字コードを入力し、前記第２のインデックステーブル、前記第１のインデックステーブル及び前記文字コード変換テーブルを基に前記入力された第２の文字コードをそれに対応する第１の文字コードに変換する第２の変換ステップと
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字コード変換に関する。
【背景技術】
【０００２】
図３は、第１の文字コード変換テーブル３０１及び第２の文字コード変換テーブル３０２の構成例を示す図である。ここでの数値は１６進数で表している。以下、文字コード及びアドレスは、特に断わらない限り、１６進数で表す。
【０００３】
第１の文字コード変換テーブル３０１は、第１の文字コード系（例えばシフトＪＩＳ）ｘを第２の文字コード系（例えばＵｎｉｃｏｄｅ）ｙに変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する。第１の文字コード変換テーブル３０１は、そのアドレスが各ブロックの最初の第１の文字コードに対応し、そのアドレスに記憶される値が第２の文字コードに対応する。例えば、第１の文字コード「９４８１」は、第２の文字コード「ｂ３００」に対応する。したがって、第１の文字コード「９４８１」は、第２の文字コード「ｂ３００」に変換することができる。アドレスに格納される値が「ｎｏｎｅ」（例えば−１）であるときには、それに対応する文字コードが存在しないことを意味する。例えば、第１の文字コード「９４８０」に対応する第２の文字コードは存在しない。
【０００４】
第２の文字コード変換テーブル３０２は、第２の文字コード系（例えばＵｎｉｃｏｄｅ）ｙを第１の文字コード系（例えばシフトＪＩＳ）ｘに変換するために第２の文字コードとそれに対応する第１の文字コードとの関係を記憶する。第２の文字コード変換テーブル３０２は、そのアドレスが第２の文字コードに対応し、そのアドレスに記憶される値が第１の文字コードに対応する。例えば、第２の文字コード「ｂ３００」は、第１の文字コード「９４８１」に対応する。したがって、第２の文字コード「ｂ３００」は、第１の文字コード「９４８１」に変換することができる。アドレスに格納される値が「ｎｏｎｅ」（例えば−１）であるときには、それに対応する文字コードが存在しないことを意味する。
【０００５】
図４は、第１のインデックステーブル４０１及び第２のインデックテーブル４０２の構成例を示す図である。
【０００６】
第１のインデックステーブル４０１は、第１の文字コード系ｘを複数のブロック（例えば１ブロックが４０（１６進数）個の文字コード）に分割し、第１の文字コード系ｘを第２の文字コード系ｙに変換するために第１の文字コード変換テーブル３０１を索引検索するためにブロック毎に第１の文字コードとそれに対応する第１の文字コード変換テーブル３０１内のアドレスとの関係を記憶する。
【０００７】
例えば、第１の文字コード「９４８１」が変換対象である場合、その文字コードに対応するブロックは「９４８０」で始まるブロックであることを演算により求める。そして、第１のインデックステーブル４０１を基に、アドレス「９４８０」に記憶されている値「Ｉｎｄｅｘ５０」を読み出す。ブロック内アドレスは、変換対象の第１の文字コード「９４８１」からブロック先頭の第１の文字コード「９４８０」を引いた値「１」である。したがって、第２の文字コード「９４８１」が存在するアドレスは、Ｉｎｄｅｘ５０＋１である。第１の文字コード変換テーブル３０１のアドレス「Ｉｎｄｅｘ５０＋１」に記憶されているのが、第２の文字コード「ｂ３００」である。第２の文字コード「ｂ３００」は、変換対象の第１の文字コード「９４８１」に対応する第２の文字コードとして求められる。このように、第１のインデックステーブル４０１を用いることにより、高速に索引検索し、第１の文字コード「９４８１」を第２の文字コード「ｂ３００」に変換することができる。
【０００８】
同様に、第２のインデックステーブル４０２は、第２の文字コード系ｙを複数のブロック（例えば１ブロックが４０（１６進数）個の文字コード）に分割し、第２の文字コード系ｙを第１の文字コード系ｘに変換するために第２の文字コード変換テーブル３０２を索引検索するためにブロック毎に第２の文字コードとそれに対応する第２の文字コード変換テーブル３０２内のアドレスとの関係を記憶する。
【０００９】
例えば、第２の文字コード「ｂ３００」が変換対象である場合、その文字コードに対応するブロックは「ｂ３００」で始まるブロックであることを演算により求める。そして、第２のインデックステーブル４０２を基に、アドレス「ｂ３００」に記憶されている値「Ｉｎｄｅｘ２００」を読み出す。第２の文字コード変換テーブル３０２のアドレス「Ｉｎｄｅｘ２００」に記憶されているのが、第１の文字コード「９４８１」である。第１の文字コード「９４８１」は、第２の文字コード「ｂ３００」に対応する第１の文字コードである。このように、第２のインデックステーブル４０２を用いることにより、高速に索引検索し、第２の文字コード「ｂ３００」を第１の文字コード「９４８１」に変換することができる。
【００１０】
第１の文字コード系と第２の文字コード系との間には規則性がないため、すべての変換データをテーブル３０１及び３０２として持つ必要がある。しかし、組み込みシステムの場合は記憶装置(メモリ)等の資源が限られている場合がある。そのため、図５に示すように、一方向のテーブルのみを持つことが考えられる。
【００１１】
図５は、第１の文字コード変換テーブル３０１及び第１のインデックステーブル４０１のみを有する文字コード変換装置の構成例を示す図である。第２の文字コード変換テーブル３０２及び第２のインデックステーブル４０２が存在しない。第１の文字コード系ｘから第２の文字コード系ｙへの変換方法は、図４の場合と同じである。第２の文字コード系ｙから第１の文字コード系ｘに変換する場合には、第１の文字コード変換テーブル３０１の先頭から順に全ブロックについて第２の文字コードを検索し、その見つかったアドレスを基に演算することにより第１の文字コードが得られ、第２の文字コードを第１の文字コードに変換することができる。この方法は、メモリ所要量が少なくてすむ反面、検索速度が遅くなる（平均検索時間は テーブルサイズ÷２である）。また、バイナリサーチ（二分木検索）による方法が考えられるが、検索は速くなる反面、結局ソートした結果を格納するためのメモリが必要になり、所要メモリ容量は２倍になる。
【００１２】
下記の特許文献１には、Ｕｎｉｃｏｄｅテキストから混合コードページにコード変換する方法及びシステムが記載されている。
【００１３】
また、下記の特許文献２には、１バイト文字のグループに従ってあらかじめ定められた変換方法で２バイト系管理テーブルの２バイト文字コードを指定する１バイト・２バイトコード変換処理方式が記載されている。
【００１４】
【特許文献１】特開２００１−３５７０３１号公報
【特許文献２】特開平３−２３５１２０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
第１の文字コード系と第２の文字コード系が存在する場合には、その両者間で文字コード変換を行う必要がある。その変換は、単純な数式で表現できないため、変換テーブルが必要になる。双方向の変換を行うためには、２つの変換テーブルが必要になる。しかし、２つの変換テーブルを用いる場合には、大容量のメモリが必要になる。
【００１６】
本発明の目的は、小容量のテーブルを用いて高速な文字変換を行うための文字コード変換装置、テーブル生成方法及びプログラムを提供することである。
【課題を解決するための手段】
【００１７】
本発明の一観点によれば、第１の文字コード系を第２の文字コード系に変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する文字コード変換テーブルと、第１の文字コード系を複数のブロックに分割し、第１の文字コード系を第２の文字コード系に変換するために文字コード変換テーブルを索引検索するためにブロック毎に第１の文字コードとそれに対応する文字コード変換テーブル内のアドレスとの関係を記憶する第１のインデックステーブルと、第２の文字コード系を複数のブロックに分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する第２のインデックステーブルと、第１の文字コードを入力し、第１のインデックステーブル及び文字コード変換テーブルを基に入力された第１の文字コードをそれに対応する第２の文字コードに変換する第１の変換手段と、第２の文字コードを入力し、第２のインデックステーブル、第１のインデックステーブル及び文字コード変換テーブルを基に入力された第２の文字コードをそれに対応する第１の文字コードに変換する第２の変換手段とを有する文字コード変換装置が提供される。
【発明の効果】
【００１８】
第１の文字コード系を第２の文字コード系に変換するための文字コード変換テーブルを用意すれば、第２の文字コード系を第１の文字コード系に変換するための文字コード変換テーブルを用意しなくてもよいので、テーブルの容量を小さくすることができる。また、第１及び第２のインデックステーブルを用いることにより、第１の文字コード系と第２の文字コード系との間の双方の文字コード変換を高速に行うことができる。
【発明を実施するための最良の形態】
【００１９】
図１は、本発明の実施形態による文字コード変換装置１０２を含む情報処理システムの構成例を示すブロック図である。情報処理システムは、例えばファイルを使用するデジタルカメラ又はオーディオプレーヤ等である。所定のファイルを指定するには、ディレクトリ名及びファイル名によりファイルを指定する。アプリケーション１０１は、ディレクトリ名及びファイル名を例えばシフトＪＩＳの文字コード系で表現する。それに対し、ファイルシステム１０３では、ディレクトリ名及びファイル名を例えばＵｎｉｃｏｄｅの文字コード系で表現する。文字コード変換装置１０２は、シフトＪＩＳとＵｎｉｃｏｄｅとの間の双方向の文字コード変換を行う。
【００２０】
アプリケーション１０１は、コンピュータプログラムの処理に対応し、種々のファイルに対する処理命令を発行する。その処理命令には、シフトＪＩＳで表現されたファイル名等を含む。文字コード変換装置１０２は、アプリケーション１０１から入力するシフトＪＩＳの文字コードをＵｎｉｃｏｄｅに変換し、ファイルシステム１０３に出力する。ファイルシステム１０３は、Ｕｎｉｃｏｄｅの文字コードで表現されたファイル名等を基に外部記憶装置１０４内のファイルを特定することができる。
【００２１】
また、ファイルシステム１０３は、外部記憶装置１０４内のファイルからＵｎｉｃｏｄｅの文字コードを取得する。文字コード変換装置１０２は、そのＵｎｉｃｏｄｅの文字をシフトＪＩＳに変換し、アプリケーション１０１に供給する。
【００２２】
上記のような処理系(プログラム)において文字コードの変換処理を行うことが求められる。例えば、ファイルシステム１０３では、処理系において各国語の標準的な文字コード系（例えばシフトＪＩＳ）とＵｎｉｃｏｄｅといった国際的な文字コード系を扱い、両者の文字コード間の変換処理を行う場合がある。文字コード変換装置１０２は、デジタル家電や産業機器などファイルシステム１０３を使用する情報処理システムで用いられ、文書処理を行う分野でも用いられる。
【００２３】
図２は、本実施形態による情報処理システムのコンピュータのハードウエア構成例を示すブロック図である。本実施形態は、図１の情報処理システムを図２のコンピュータで実現することができる。
【００２４】
バス２０１には、中央処理装置（ＣＰＵ）２０２、ＲＯＭ２０３、ＲＡＭ２０４、ネットワークインタフェース２０５、入力装置２０６、出力装置２０７及び外部記憶装置２０８が接続されている。
【００２５】
ＣＰＵ２０２は、データの処理又は演算を行うと共に、バス２０１を介して接続された各種構成要素を制御するものである。ＲＡＭ２０４は、データの入出力のためのワークメモリ、各構成要素の制御のための一時記憶装置として用いられる。外部記憶装置２０８は、例えばハードディスク記憶装置、メモリカード又はＣＤ−ＲＯＭ等であり、電源を切っても記憶内容が消えず、ファイルやコンピュータプログラム等を記憶する。ＲＯＭ２０３には、予めＣＰＵ２０２の制御手順（コンピュータプログラム）を記憶させておき、このコンピュータプログラムをＣＰＵ２０２が実行することにより、図１のアプリケーション１０１、文字コード変換装置１０２、ファイルシステム１０３の処理を行う。コンピュータプログラムは、外部記憶装置２０８に記憶させてもよい。
【００２６】
ネットワークインタフェース２０５は、ネットワークに接続するためのインタフェースである。入力装置２０６は、例えばボタン、キーボード又はマウス等であり、各種指定又は入力等を行うことができる。出力装置２０７は、ディスプレイ又はプリンタ等である。
【００２７】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、プログラムをコンピュータに供給するための手段、例えばかかるプログラムを記録したＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体又はかかるプログラムを伝送するインターネット等の伝送媒体も本発明の実施形態として適用することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。上記のプログラム、記録媒体、伝送媒体及びコンピュータプログラムプロダクトは、本発明の範疇に含まれる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００２８】
図６は、本実施形態による文字コード変換装置の構成例を示す図である。第１の文字コード変換テーブル３０１、第１のインデックステーブル４０１及び第２のインデックステーブル６０２は、図２のＲＯＭ２０３又は外部記憶装置２０８等の不揮発性メモリに記憶される。第１の文字コード変換テーブル３０１及び第１のインデックステーブル４０１は、上述した通りであるので、ここでの説明は省略する。また、第１の文字コード系ｘから第２の文字コード系ｙへの変換方法も、上述した通りであるので、ここでの説明は省略する。
【００２９】
第２のインデックステーブル６０２は、第２の文字コード系ｙを複数のブロック（例えば１ブロックが４０（１６進数）個の文字コード）に分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する。第２のインデックステーブル６０２は、図３の第２の文字コード変換テーブル３０２を基に生成され、その生成後に第２の文字コード変換テーブル３０２は削除される。第２のインデックステーブル６０２は、アドレスが各ブロックの最初の第２の文字コードに対応し、そのアドレスに記憶される値はそのブロック内で変換可能な全ての第２の文字コードに対応する第１の文字コードを調べた結果であるところの最小の第１の文字コードである。例えば、第２の文字コード「ｂ３００」から始まるブロックでは、変換可能な第２の文字コードに対応する第１の文字コードの最小値は「９４８１」であるので、その値を取得する。そして、その第１の文字コード「９４８１」を、第２のインデックステーブル６０２の第２の文字コード「ｂ３００」のアドレスに記憶させる。
【００３０】
第１の文字コード変換テーブル３０１には、次の様な特有の事情がある。有効な文字コードは値として分散しているが、比較的偏在しているところが多い。すなわち、有効な文字コードが局所的に集中しており、有効な文字コードが１つも存在しないブロックが比較的多数存在する。文字コードの種類により偏在の度合いが異なり、偏在の割合が高い場合、第１の文字コード変換テーブル３０１を複数のブロックに分割して、有効な文字コードが存在しないブロックは第１の文字コード変換テーブル３０１から削除し、その削除したブロックに対応する第１のインデックステーブル４０１の値を「ｎｏｎｅ」にする。すなわち、第１の文字コード変換テーブル３０１は、ブロック内の第１の文字コードに対応する第２の文字コードが１つも存在しないブロックが削除されている。これにより、第１の文字コード変換テーブル３０１の容量を小さくすることができる。
【００３１】
第１の文字コード変換テーブル３０１では、有効な文字コードの値は連続していることが多い。しかし完全に連続でない。例えば、第１の文字コード系ｘと第２の文字コード系ｙは、以下のような対応関係がある。
【００３２】
x=0x9481, 0x9482,…,0x9491,0x9492,0x9493,…,0x949d,0x949e,…,0x94a0.0x94a1,…
↓
y=0xb300, 0xb301,…,0xb310,<None>,0xb311,…,0xb31b,<None>,…,<None>,0xb31c,…
【００３３】
しかし、図３の第２の文字コード変換テーブル３０２は偏在の割合が高くなく、結局大きなテーブルになることが多い。そのため、本実施形態において、第２の文字コード変換テーブル３０２を削除することにより、必要なメモリ容量を極めて小さくすることができる。本実施形態では、サイズが大きい方の（偏在の割合が低い）テーブル３０２を使用せず、サイズが小さい方の（偏在の割合が高い）テーブル３０１のみを使用し、双方向の文字コード変換を行う。
【００３４】
図７は、本実施形態による第１のインデックステーブル４０１の生成処理例を示すフローチャートである。この処理は、ＣＰＵ２０２がコンピュータプログラムを実行することにより行われる。以下、「０ｘ」が先頭に付与された数字は、１６進数の数字を表す。
【００３５】
ステップＳ７０１では、第１の文字コード変換テーブル３０１を生成して準備する。次に、ステップＳ７０２では、第１の文字コード変換テーブル３０１を適当な大きさ（例えば０ｘ４０）毎のブロックに分割する。次に、ステップＳ７０３では、ブロックの中味を先頭から調べる。次に、ステップＳ７０４では、そのブロックが最後のブロックか否かをチェックする。最後のブロックでなければステップＳ７０５へ進み、最後のブロックであればステップＳ７０８へ進んで処理を終了する。
【００３６】
ステップＳ７０５では、ブロックの中味に有効な文字コードを含むか否かをチェックする。そのブロック内に１つでも有効な文字コードがある場合にはステップＳ７０６へ進み、すべてが無効な文字コードである場合にはステップＳ７０７へ進む。
【００３７】
ステップＳ７０６では、そのブロックのインデックスとして、そのブロックが存在するアドレス（位置）を示す第１の文字コード変換テーブル３０１の先頭からの相対アドレスを第１のインデックステーブル４０１に設定する。その後、ステップＳ７０４に戻り、次のブロックについて同様の処理を繰り返す。
【００３８】
ステップＳ７０７では、そのブロックを第１の文字コード変換テーブル３０１から削除して、「ｎｏｎｅ」をインデックスとして第１のインデックステーブル４０１に設定する。その後、ステップＳ７０４に戻り、次のブロックについて同様の処理を繰り返す。
【００３９】
図８は、本実施形態による第２のインデックステーブル６０２の生成処理例を示すフローチャートである。この処理は、ＣＰＵ２０２がコンピュータプログラムを実行することにより行われる。
【００４０】
ステップＳ８０１では、図３の第２の文字コード変換テーブル３０２を生成して準備する。次に、ステップＳ８０２では、第２の文字コード変換テーブル３０２を適当な大きさ（例えば０ｘ４０）毎のブロックに分割する。次に、ステップＳ８０３では、ブロックの中味を先頭から調べる。次に、ステップＳ８０４では、そのブロックが最後のブロックか否かをチェックする。最後のブロックでなければステップＳ８０５へ進み、最後のブロックであればステップＳ８０８へ進む。
【００４１】
ステップＳ８０５では、ブロックの中味に有効な文字コードを含むか否かをチェックする。そのブロック内に１つでも有効な文字コードがある場合にはステップＳ８０６へ進み、すべてが無効な文字コードである場合にはステップＳ８０７へ進む。
【００４２】
ステップＳ８０６では、そのブロックのインデックスとして、そのブロックの中で変換可能な第２の文字コードに対応する最小の第１の文字コードを第２のインデックステーブル６０２に設定する。その後、ステップＳ８０４に戻り、次のブロックについて同様の処理を繰り返す。
【００４３】
ステップＳ８０７では、そのブロックを第２の文字コード変換テーブル３０２から削除して、「ｎｏｎｅ」をインデックスとして第２のインデックステーブル６０２に設定する。その後、ステップＳ８０４に戻り、次のブロックについて同様の処理を繰り返す。
【００４４】
ステップＳ８０８では、第２の文字コード変換テーブル３０２を削除する。その後、ステップＳ８０９へ進み、処理を終了する。
【００４５】
図９は、第１の文字コードｘを第２の文字コードｙに変換する処理例を示すフローチャートである。この処理は、ＣＰＵ２０２がコンピュータプログラムを実行することにより行われる。ここでは、第１の文字コードｘ＝０ｘ９４８３を第２の文字コードｙ＝０ｘｂ３０２に変換する例を説明する。１ブロックの大きさは０ｘ４０とする。
【００４６】
ステップＳ９０１では、第１の文字コードｘが入力されると、ｘの値をブロックの大きさで除算することにより、第１のインデックステーブル４０１の何番目のインデックスかを演算する。例えば、０ｘ９４８３／０ｘ４０＝０ｘ２５２である。したがって、第１の文字コード「０ｘ９４８３」のブロックは、０ｘ２５２番目のインデックスに存在することが分かる。
【００４７】
次に、ステップＳ９０２では、該当するインデックス（ブロックの相対アドレス）を参照する。例えば、第１のインデックステーブル４０１の０ｘ２５２番目のインデックスを参照すると、インデックスXtoYIndex[0x252]＝Ｉｎｄｅｘ５０である。ここで、XtoYIndex[n]は、第１のインデックステーブル４０１のｎ番目のインデックスを表す。したがって、ブロックの相対アドレスは、Ｉｎｄｅｘ５０である。
【００４８】
次に、ステップＳ９０３では、第１の文字コードｘの値からブロック内位置をビット積演算で求める。第１の文字コードｘと０ｘ３ｆ（＝ブロックサイズ０ｘ４０−１）とのビット積演算を行う。例えば、０ｘ９４８３ ＆ ０ｘ３ｆ＝０ｘ３である。したがって、ブロック内位置は０ｘ３である。
【００４９】
次に、ステップＳ９０４では、上記のブロックの相対アドレスとブロック内位置を基に第２の文字コードｙを求める。すなわち、第１の文字コード変換テーブル３０１において、ブロックの相対アドレスにブロック内位置を足したアドレスに記憶されている第２の文字コードｙを読み出す。例えば、XtoYTable[Index50+0x3]＝０ｘｂ３０２である。ここで、XtoYTable[a]は、第１の文字コード変換テーブル３０１の先頭からの相対アドレスａに記憶されている値を表す。これにより、第２の文字コード「０ｘｂ３０２」が得られる。
【００５０】
次に、ステップＳ９０５では、読み出した第２の文字コードｙが有効な値か否かをチェックする。値が「ｎｏｎｅ」であれば無効値である。有効値である場合にはステップＳ９０６へ進み、無効値である場合にはステップＳ９０７へ進む。
【００５１】
ステップＳ９０６では、第２の文字コードｙを得て、正常終了する。ステップＳ９０７では、正常値が得られないので、対応する第２の文字コードが存在しないことを示して、異常終了する。
【００５２】
以上のように、第１の文字コードから第２の文字コードへの変換手段は、第１の文字コードを入力し、第１のインデックステーブル４０１及び第１の文字コード変換テーブル３０１を基に前記入力された第１の文字コードをそれに対応する第２の文字コードに変換する。
【００５３】
具体的には、第１の文字コードを入力し、その第１の文字コードに対応するブロックのアドレスを第１のインデックステーブル４０１から読み出し、前記読み出したアドレスを基に第１の文字コード変換テーブル３０１内から前記入力された第１の文字コードに対応する第２の文字コードを検索することにより、前記入力された第１の文字コードをそれに対応する第２の文字コードに変換する。
【００５４】
図１０は、第２の文字コードｙを第１の文字コードｘに変換する処理例を示すフローチャートである。この処理は、ＣＰＵ２０２がコンピュータプログラムを実行することにより行われる。ここでは、第２の文字コードｙ＝０ｘｂ３０２を第１の文字コードｘ＝０ｘ９４８３に変換する例を説明する。１ブロックの大きさは０ｘ４０とする。
【００５５】
ステップＳ１００１では、第２の文字コードｙが入力されると、ｙの値をブロックの大きさで除算することにより、第２のインデックステーブル６０２の何番目のインデックスかを演算する。例えば、０ｘｂ３０２／０ｘ４０＝０ｘ２ｃｃである。したがって、第２の文字コード「０ｘｂ３０２」のブロックは、０ｘ２ｃｃ番目のインデックスに存在することが分かる。
【００５６】
次に、ステップＳ１００２では、該当するインデックス（第１の文字コードの初期値ｘ１）を参照する。例えば、第２のインデックステーブル６０２の０ｘ２ｃｃ番目のインデックスとして、インデックスYtoXIndex[0x2cc]＝０ｘ９４８１を読み出す。ここで、YtoXIndex[n]は、第２のインデックステーブル６０２のｎ番目のインデックスを表す。これにより、第１の文字コードｘ１＝０ｘ９４８１が得られる。
【００５７】
次に、ステップＳ１００３では、第１の文字コードｘ１の値をブロックの大きさで除算することにより、第１の文字コードｘ１が属するブロックが第１のインデックステーブル４０１の何番目のインデックスに存在するのかを求める。例えば、０ｘ９４８１／０ｘ４０＝０ｘ２５２である。すなわち、第１のインデックステーブル４０１の０ｘ２５２番目に存在する。
【００５８】
次に、ステップＳ１００４では、上の除算結果が何番目かを示すので、第１のインデックステーブル４０１の除算結果が示す位置からインデックスを読み出す。そのインデックスは、第１の文字コードｘ１が属するブロック位置を示すアドレスであり、第１の文字コード変換テーブル３０１の相対アドレスである。例えば、XtoYIndex[0x252]＝Ｉｎｄｅｘ５０である。Ｉｎｄｅｘ５０は、図６に示すように、第１の文字コード「９４８０」のブロックの相対アドレスである。
【００５９】
次に、ステップＳ１００５では、第１の文字コードｘ１の値を基に第１の文字コードｘ１のブロック内位置をビット積演算で求める。すなわち、第１の文字コードｘ１と０ｘ３ｆ（＝ブロックサイズ０ｘ４０−１）とのビット積演算により、ブロック内位置が得られる。例えば、０ｘ９４８１ ＆ ０ｘ３ｆ＝０ｘ１である。すなわち、ブロック内位置は０ｘ１である。
【００６０】
次に、ステップＳ１００６では、上記のブロックの相対アドレスとブロック内位置を基に第２の文字コードｙを求める。すなわち、ブロックの相対アドレスにブロック内位置を加算したアドレスに記憶されている値を第１の文字コード変換テーブル３０１から読み出す。例えば、XtoYtable[Index50+0x1]＝０ｘｂ３００である。読み出された第２の文字コードは、０ｘｂ３００である。
【００６１】
次に、ステップＳ１００７では、上記の第２の文字コードｙが変換対象の第２の文字コード「０ｘｂ３０２」に等しいか否かをチェックする。等しくない場合にはステップＳ１００８へ進み、等しい場合にはステップＳ１０１４へ進む。
【００６２】
ステップＳ１００８では、第１の文字コードｘ及びブロック内位置に１を加算し、次のアドレス検索の準備を行う。次に、ステップＳ１００９では、そのブロック内位置がブロック内の最後のアドレスか否かをチェックする。最後であればステップＳ１０１０へ進み、最後でなければステップＳ１００６へ戻り、次のアドレスについて同様の処理を繰り返す。ブロック内に変換対象の第２の文字コード「０ｘｂ３０２」が存在すれば、ステップＳ１００７からステップＳ１０１４へ進む。ステップＳ１０１４では、第１の文字コードｘが変換後の文字コードとして得られ、正常終了する。第１の文字コードｘは、ブロック内位置と共にステップＳ１００８で加算されているので、見つかったブロック内位置に対応する第１の文字コードとして得られる。その第１の文字コードは、「０ｘ９４８３」である。
【００６３】
ブロック内に存在しないときには、ステップＳ１０１０へ進む。ステップＳ１０１０では、全てのブロックを調べたか否かをチェックする。調べていないときにはステップＳ１０１１へ進み、調べたときにはステップＳ１０１５へ進む。ステップＳ１０１５では、変換対象の第２の文字コード「０ｘｂ３０２」が見つからなかったので、それに対応する第１の文字コードが存在しないことを示して、異常終了する。
【００６４】
ステップＳ１０１１では、第１のインデックステーブル４０１の次のブロックのインデックスが「ｎｏｎｅ」か否かをチェックする。第１のインデックステーブル４０１に記憶されているインデックスが「ｎｏｎｅ」であるときには、そのブロックには有効な第１の文字コードが存在せず、そのブロックは第１の文字コード変換テーブル３０１から削除されている。インデックスが「ｎｏｎｅ」であるときにはステップＳ１０１３へ進み、「ｎｏｎｅ」でないときにはステップＳ１０１２へ進む。
【００６５】
ステップＳ１０１３では、第１の文字コードｘにブロックサイズ０ｘ４０を加算する。すなわち、そのブロックは存在しないので、その次のブロックに進む。その後、ステップＳ１０１０へ戻り、上記の処理を繰り返す。
【００６６】
ステップＳ１０１２では、ブロック内位置を０にし、次のブロックを調べる。その後、ステップＳ１００６へ戻り、次のブロックについて同様の処理を繰り返す。変換対象の第２の文字コード「０ｘｂ３０２」が見つかれば、ステップＳ１０１４にて変換後の第１の文字コードｘが得られる。全ブロック内に変換対象の第２の文字コード「０ｘｂ３０２」が見つからなければ、ステップＳ１０１５にて異常終了する。
【００６７】
以上のように、第２の文字コードから第１の文字コードへの変換手段は、第２の文字コードを入力し、第２のインデックステーブル６０２、第１のインデックステーブル４０１及び第１の文字コード変換テーブル３０１を基に前記入力された第２の文字コードをそれに対応する第１の文字コードに変換する。
【００６８】
具体的には、第２の文字コードを入力し、その第２の文字コードのブロックに対応する第１の文字コードを第２のインデックステーブル６０２から読み出し、前記読み出した第１の文字コードのブロックに対応するアドレスを第１のインデックステーブル４０１から読み出し、前記読み出したアドレスを基に第１の文字コード変換テーブル３０１内から前記入力された第２の文字コードを検索し、その検索された第２の文字コードのアドレスを基に第１の文字コードを演算することにより、前記入力された第２の文字コードをそれに対応する第１の文字コードに変換する。
【００６９】
第２の文字コードｙから第１の文字コードｘへの変換は、第１の文字コード変換テーブル３０１内において局所的にみると第２の文字コードが連続して配置されていることが多い性質を利用している。すなわち、ブロックの順番としては不規則であるが、ブロック内においては比較的規則正しく第２の文字コードが存在する。例えば、図６の第１の文字コード変換テーブル３０１において、インデックスＩｎｄｅｘ５０が示すブロックは、第２の文字コード「ｂ３００」から始まるブロックがそのブロック内に存在する確率が極めて高い。したがって、そのブロックを先頭から順次検索することにより、変換対象の第２の文字コードを高速に検索することができる。ブロック内に存在しない場合には、次のブロックを順次検索することになり、検索時間は遅くなるが、ブロック内に存在する確率が極めて高いことから、全体的にみれば平均検索時間は極めて高速になる。しかも、図３の第２の文字コード変換テーブル３０２が不要であるので、必要なメモリ容量を小さくすることができ、組み込みシステムに利用可能になる。
【００７０】
本実施形態は、第２の文字コード変換テーブル３０２を持たないので、図４の第２の文字コード変換テーブル３０２を持つ場合に比べて、テーブルのサイズが約２／３減となる。また、本実施形態は、図５のように第２のインデックステーブルを持たない場合において第２の文字コードから第１の文字コードに変換する際の単純な順検索に比べて、メモリ所要量が若干（例えば５％）増える程度で、検索速度が数十倍速くなる効果が見積もられる。
【００７１】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００７２】
本発明の実施形態は、例えば以下のように種々の適用が可能である。
【００７３】
（付記１）
第１の文字コード系を第２の文字コード系に変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する文字コード変換テーブルと、
前記第１の文字コード系を複数のブロックに分割し、前記第１の文字コード系を第２の文字コード系に変換するために前記文字コード変換テーブルを索引検索するために前記ブロック毎に前記第１の文字コードとそれに対応する前記文字コード変換テーブル内のアドレスとの関係を記憶する第１のインデックステーブルと、
前記第２の文字コード系を複数のブロックに分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する第２のインデックステーブルと、
第１の文字コードを入力し、前記第１のインデックステーブル及び前記文字コード変換テーブルを基に前記入力された第１の文字コードをそれに対応する第２の文字コードに変換する第１の変換手段と、
第２の文字コードを入力し、前記第２のインデックステーブル、前記第１のインデックステーブル及び前記文字コード変換テーブルを基に前記入力された第２の文字コードをそれに対応する第１の文字コードに変換する第２の変換手段と
を有する文字コード変換装置。
（付記２）
前記第１の変換手段は、第１の文字コードを入力し、その第１の文字コードに対応するブロックのアドレスを前記第１のインデックステーブルから読み出し、前記読み出したアドレスを基に前記文字コード変換テーブル内から前記入力された第１の文字コードに対応する第２の文字コードを検索することにより、前記入力された第１の文字コードをそれに対応する第２の文字コードに変換し、
前記第２の変換手段は、第２の文字コードを入力し、その第２の文字コードのブロックに対応する第１の文字コードを前記第２のインデックステーブルから読み出し、前記読み出した第１の文字コードのブロックに対応するアドレスを前記第１のインデックステーブルから読み出し、前記読み出したアドレスを基に前記文字コード変換テーブル内から前記入力された第２の文字コードを検索し、その検索された第２の文字コードのアドレスを基に第１の文字コードを演算することにより、前記入力された第２の文字コードをそれに対応する第１の文字コードに変換する付記１記載の文字コード変換装置。
（付記３）
前記文字コード変換テーブルは、ブロック内の第１の文字コードに対応する第２の文字コードが１つも存在しないブロックが削除されている付記１又は２記載の文字コード変換装置。
（付記４）
前記文字コード変換テーブル、前記第１のインデックステーブル及び前記第２のインデックステーブルはメモリに記憶され、
前記第１及び第２の変換手段はＣＰＵの処理により実行される付記１〜３のいずれか１項に記載の文字コード変換装置。
（付記５）
第１の文字コード系を第２の文字コード系に変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する第１の文字コード変換テーブルを準備するステップと、
第２の文字コード系を第１の文字コード系に変換するために第２の文字コードとそれに対応する第１の文字コードとの関係を記憶する第２の文字コード変換テーブルを準備するステップと、
前記第１の文字コード系を複数のブロックに分割し、前記第１の文字コード系を第２の文字コード系に変換するために前記第１の文字コード変換テーブルを索引検索するために前記ブロック毎に前記第１の文字コードとそれに対応する前記第１の文字コード変換テーブル内のアドレスとの関係を記憶する第１のインデックステーブルを生成するステップと、
前記第２の文字コード変換テーブルを基に、前記第２の文字コード系を複数のブロックに分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する第２のインデックステーブルを生成するステップと
を有するテーブル生成方法。
（付記６）
さらに、前記第２の文字コード変換テーブルを削除するステップと、
前記第１の文字コード変換テーブルにおいて、ブロック内の第１の文字コードに対応する第２の文字コードが１つも存在しないブロックを削除するステップと
を有する付記５記載のテーブル生成方法。
（付記７）
第１の文字コード系を第２の文字コード系に変換するために第１の文字コードとそれに対応する第２の文字コードとの関係を記憶する文字コード変換テーブルと、
前記第１の文字コード系を複数のブロックに分割し、前記第１の文字コード系を第２の文字コード系に変換するために前記文字コード変換テーブルを索引検索するために前記ブロック毎に前記第１の文字コードとそれに対応する前記文字コード変換テーブル内のアドレスとの関係を記憶する第１のインデックステーブルと、
前記第２の文字コード系を複数のブロックに分割し、その各ブロック内で変換可能な第２の文字コードに対応する最小の第１の文字コードを記憶する第２のインデックステーブルとを用いて文字コード変換を行うためのプログラムであって、
第１の文字コードを入力し、前記第１のインデックステーブル及び前記文字コード変換テーブルを基に前記入力された第１の文字コードをそれに対応する第２の文字コードに変換する第１の変換ステップと、
第２の文字コードを入力し、前記第２のインデックステーブル、前記第１のインデックステーブル及び前記文字コード変換テーブルを基に前記入力された第２の文字コードをそれに対応する第１の文字コードに変換する第２の変換ステップと
をコンピュータに実行させるためのプログラム。
【図面の簡単な説明】
【００７４】
【図１】本発明の実施形態による文字コード変換装置を含む情報処理システムの構成例を示すブロック図である。
【図２】本実施形態による情報処理システムのコンピュータのハードウエア構成例を示すブロック図である。
【図３】第１の文字コード変換テーブル及び第２の文字コード変換テーブルの構成例を示す図である。
【図４】第１のインデックステーブル及び第２のインデックテーブルの構成例を示す図である。
【図５】第１の文字コード変換テーブル及び第１のインデックステーブルのみを有する文字コード変換装置の構成例を示す図である。
【図６】本実施形態による文字コード変換装置の構成例を示す図である。
【図７】本実施形態による第１のインデックステーブルの生成処理例を示すフローチャートである。
【図８】本実施形態による第２のインデックステーブルの生成処理例を示すフローチャートである。
【図９】第１の文字コードを第２の文字コードに変換する処理例を示すフローチャートである。
【図１０】第２の文字コードを第１の文字コードに変換する処理例を示すフローチャートである。
【符号の説明】
【００７５】
１０１  アプリケーション
１０２  文字コード変換装置
１０３  ファイルシステム
１０４  外部記憶装置
２０１  バス
２０２  ＣＰＵ
２０３  ＲＯＭ
２０４  ＲＡＭ
２０５  ネットワークインタフェース
２０６  入力装置
２０７  出力装置
２０８  外部記憶装置
３０１  第１の文字コード変換テーブル
３０２  第２の文字コード変換テーブル
４０１  第１のインデックステーブル
４０２  第２のインデックステーブル
６０２  第２のインデックステーブル
【図１】
2006252330.tif 000003
【図２】
2006252330.tif 000004
【図３】
2006252330.tif 000005
【図４】
2006252330.tif 000006
【図５】
2006252330.tif 000007
【図６】
2006252330.tif 000008
【図７】
2006252330.tif 000009
【図８】
2006252330.tif 000010
【図９】
2006252330.tif 000011
【図１０】
2006252330.tif 000012