JP6524887B2 - 文字コード処理プログラム、情報処理装置、及び文字コード処理方法 - Google Patents

文字コード処理プログラム、情報処理装置、及び文字コード処理方法 Download PDF

Info

Publication number
JP6524887B2
JP6524887B2 JP2015214543A JP2015214543A JP6524887B2 JP 6524887 B2 JP6524887 B2 JP 6524887B2 JP 2015214543 A JP2015214543 A JP 2015214543A JP 2015214543 A JP2015214543 A JP 2015214543A JP 6524887 B2 JP6524887 B2 JP 6524887B2
Authority
JP
Japan
Prior art keywords
byte
code
character
character code
bytes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2015214543A
Other languages
English (en)
Other versions
JP2017084263A (ja
Inventor
なお子 立岩
なお子 立岩
山本 剛司
剛司 山本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015214543A priority Critical patent/JP6524887B2/ja
Publication of JP2017084263A publication Critical patent/JP2017084263A/ja
Application granted granted Critical
Publication of JP6524887B2 publication Critical patent/JP6524887B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、文字コード処理プログラム、情報処理装置、及び文字コード処理方法に関する。
プログラムで文字列が扱われる場合、文字列に使用する言語、文字の種類、1文字あたりのバイト数等の種々の条件に応じて適切な文字コード体系が選択される。
一例として、COBOL(Common Business Oriented Language)プログラムでは文字コード体系としてシフトJIS(Shift_JIS)が用いられることがある。シフトJISでは、ひらがな、カタカナ、及び漢字等の日本語文字が1文字2バイトで表現されるが、半角カナは1文字1バイトで表現される。シフトJISでは少ないバイト数で半角カナを表現できるため、COBOLプログラムではこのような特性を利用するために半角カナが用いられることが多い。
なお、関連する技術として、シフトJISの1バイトコード表(図29の左側参照)を固有の文字コード体系(図29の右側参照)に変換して処理し、表示又は印刷の前に復元する技術も知られている。固有のコード体系では、半角英数字及び半角カナのコード域を移動して連続領域とし、さらに全角文字のコード域も移動し、シフトJISコードの文字範囲に加えて拡張文字も同時に扱うことができる。なお、図29に例示する1バイトコード表において、縦軸は1バイトの上位4ビットを表し、横軸は1バイトの下位4ビットを表す。
特開平2−257276号公報
ところで、近年、表現可能な文字の種類を広げるために、シフトJISからUnicodeへの移行が進んでいる。
Unicode、例えばUTF−8(Unicode Transformation Format-8)では、半角カナは1文字3バイトで表現される。このため、プログラムで用いる文字コードをシフトJISからUnicodeへ移行させるためには、文字コード体系における領域拡張や文字コードの認識のロジック変更を行なう。このように、文字コードの変更に伴い既存のプログラムを変更することになり、プログラムの改修コストが発生してしまう。
なお、図29に例示する手法では、変換前の文字(例えば“A”)と変換後の文字(例えば“a”)とが同じ文字コード“0x41”で表される。また、図30に例示するように、変換後の文字の文字コードの組み合わせが別の文字に割り当てられている場合もある。そこで、図29に例示する手法では、処理対象となる文字コードが変換前後のいずれの文字であるかを管理する。
しかし、文字コードの変換前後の管理を行なったとしても、変換後の文字列をファイル等の記憶装置に保存した後、利用者が誤って変換後の文字列を変換前の文字列として入力してしまった場合、プログラムが誤動作し得る。
例えば図31に示すように、圧縮前データに圧縮後の半角カナ文字“イ”(コード“0x72”)を挿入して混合データとした場合や、圧縮後データに圧縮前の半角カナ文字“イ”(コード“0xB2”)を挿入して混合データとした場合、圧縮又は復元によって文字列の少なくとも一部が破壊され得る。
上述した不都合の発生は、プログラムで用いる文字コードを他の文字コードへ移行させる場合に限定されるものではなく、プログラムの開発又は運用等における他の場面でも同様に生じ得る。また、上述した不都合の発生は、半角カナの文字コードを圧縮又は復元する場合に限定されるものではなく、他の文字種の文字コードを圧縮又は復元する場合においても同様に生じ得る。
1つの側面では、本発明は、文字コードのバイト数を削減することを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の1つとして位置付けることができる。
1つの態様では、本件の文字コード処理プログラムは、コンピュータに以下の処理を実行させる。前記処理は、記憶部に記憶された、所定の文字コード体系において2バイト以上のバイトコードに対応する文字と前記所定の文字コード体系における多バイト文字の上位から2バイト目以降のバイトコードに用いられる1バイトのコードとの対応関係を示す情報を参照することを含む。また、前記処理は、バイトコードを解釈する処理の際に、前記2バイト目以降のバイトコードに用いられる1バイトのコードが最上位バイトのバイトコードとして出現した場合には、前記対応関係を示す情報において、出現した前記2バイト目以降のバイトコードに用いられる1バイトのコードに対応する文字であると解釈することを含む。
1つの側面では、文字コードのバイト数を削減することができる。
EUCの1バイトコード表を示す図である。 比較例に係る圧縮手法を説明する図である。 比較例において圧縮後のバイト列が全角漢字のバイト列と混在する場合を示す図である。 比較例において圧縮後のバイト列が全角漢字のバイト列と混在する場合を示す図である。 UTF−8の1バイトコード表を示す図である。 一実施形態に係るシステムの構成例を示す図である。 一実施形態に係る処理装置のハードウェア構成例を示す図である。 第1の手法の一例を示す図である。 第1の手法に係る圧縮情報の一例を示す図である。 第1の手法に係る復元情報の一例を示す図である。 第2の手法の一例を示す図である。 第2の手法に係る圧縮情報の一例を示す図である。 第2の手法に係る復元情報の一例を示す図である。 一実施形態に係る圧縮手法の一例を説明する図である。 一実施形態に係る変換前後の文字コードの一例を示す図である。 一実施形態において圧縮後のバイト列が全角漢字のバイト列と混在する場合を示す図である。 混合データが生成される場合の一例を示す図である。 混合データに対して圧縮又は復元を行なう場合の一例を示す図である。 コンパイラの処理の一例を説明するフローチャートである。 アプリケーションの処理の一例を説明するフローチャートである。 ランタイムシステムの処理の一例を説明するフローチャートである。 ランタイムシステムの処理の一例を説明するフローチャートである。 ランタイムシステムの処理の一例を説明するフローチャートである。 ランタイムシステムの処理の一例を説明するフローチャートである。 圧縮処理部による圧縮処理の一例を説明するフローチャートである。 圧縮処理部による圧縮処理の一例の詳細を説明するフローチャートである。 復元処理部による復元処理の一例を説明するフローチャートである。 復元処理部による復元処理の一例の詳細を説明するフローチャートである。 シフトJISの1バイトコード表を固有の文字コード体系に変換する手法の一例を説明する図である。 図29に示す手法に係る変換前後の文字コードの一例を示す図である。 図29に示す手法において混合データに対して圧縮又は復元を行なう場合の一例を示す図である。
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。また、以下の説明では、“ア”のように全角カナをダブルクォーテーションで囲うことによって半角カナを表現する。
〔1〕比較例
はじめに、比較例について説明する。なお、以下の説明では、半角カナを2バイトで表現するEUC−JP(Extended UNIX(登録商標) Code Packed Format for Japanese)(以下、単にEUCと表記する)の文字コード体系において、COBOLプログラムの改修を行なわずに、半角カナを1バイトで扱う場合を例に挙げる。
EUCの1バイトコード表を図1に例示する。EUCの半角カナは、上位バイト“8E”(16進表記、以下同様)に続き、下位バイト“A1”〜“DF”で表現されるという特性がある。比較例では、この特性を利用して、上位バイト“8E”を除いた1バイト“A1”〜“DF”を半角カナとみなす変換規則を採用する。なお、図1に例示する1バイトコード表において、縦軸は1バイトの上位4ビットを表し、横軸は1バイトの下位4ビットを表す。
一例として、EUCの半角カナ文字“テスト”に対して変換規則を適用し、文字コードを圧縮及び復元する場合を説明する。なお、文字コードの圧縮及び復元は、COBOLプログラムの開発環境におけるコンパイラ又は運用環境におけるランタイムシステム等にそなえられる圧縮処理部及び復元処理部により行なうことができる。
図1に示すように、EUCにおける半角カナ“テスト”のそれぞれの文字は、“8E C3”、“8E BD”、“8E C4”の2バイトの文字コードで表現される。圧縮処理部は、比較例に係る変換規則によりこれらの2バイトの文字コードから上位バイト“8E”を除去し、それぞれ“C3”、“BD”、“C4”の1バイトの文字コードに圧縮することができる。
しかしながら、圧縮後の“テス”を表すバイト列“C3 BD”は、図2に示す全角漢字のコードと完全一致する。このため、圧縮後のバイト列からは“テス”であるのか図2に示す全角漢字であるのかの判断が困難となり、以下の(a)及び(b)の不都合が生じ得る。
(a)同時に処理可能な文字の種類が制限される。
例えば図3に示すように、圧縮後のバイト列が全角漢字のバイト列と混在する場合、復元処理部によって正しく復元することが困難となる。上述のように、圧縮後のバイト列と全角漢字のバイト列とが完全一致する場合があり、復元の際に半角カナであるのか全角漢字であるのかの判断が困難となるからである。
なお、英数字を表すASCII(American Standard Code for Information Interchange)の文字コードの範囲(“20”〜“7F”)は、圧縮後のバイト列の文字コードの範囲(“A1”〜“DF”)とは重ならない。従って、比較例に係る手法では、圧縮処理部及び復元処理部により処理可能な文字は半角カナ及び英数字(ASCII)となる。換言すれば、半角カナ及び英数字については混在することが許容されるため、利用者による運用によっては比較例に係る手法を利用することも可能である。
(b)各々の文字列に対して圧縮済か否かを管理する。
例えば図4に示すように、圧縮後のバイト列が全角漢字のバイト列と混在する場合、圧縮処理部による再圧縮(各文字コードからの“8E”の除去)又は復元処理部による復元(各文字コードへの“8E”の付加)によって、文字列が壊れる場合がある。このように、圧縮及び復元を行なう文字列に含める文字種を半角カナ及び英数字に制限したとしても、利用者の使用法誤解等によって「漢字との混在」、「圧縮前後の文字の混在」、「再圧縮又は再復元」等が生じた場合には、データ破壊に繋がる虞がある。
文字ごとに圧縮状態を管理することで、このような文字列の破壊を避けることはできるが、圧縮状態を管理するために処理性能の低下や記憶領域の圧迫等、利用可能なリソースの低下が生じ得る。
以上のように、比較例として挙げた手法では、半角カナ等の特定の文字種を圧縮及び復元する際に、同時に処理可能な文字が制限され、圧縮状態を管理するためのリソースを消費することになる。
〔2〕一実施形態
そこで、一実施形態では、以下の手法により、上述した不都合を解消しつつ文字コードのバイト数を削減する。なお、以下の説明では、半角カナを3バイトで表現するUTF−8の文字コード体系において半角カナを1バイトで扱う場合を例に挙げる。
図5はUTF−8のバイトコード表を例示する図である。なお、図5に例示する1バイトコード表において、縦軸は1バイトの上位4ビットを表し、横軸は1バイトの下位4ビットを表す。図5に例示するように、“00”〜“1F”(16進表記、以下同様)は「制御コード」、“20”〜“7F”は「ASCII」、“80”〜“BF”は「多バイト文字の2バイト目以降のバイトコード」、“C0”〜“DF”は「2バイト文字の開始バイト」である。また、“E0”〜“EF”は「3バイト文字の開始バイト」、“F0”〜“F7”は「4バイト文字の開始バイト」、“F8”〜“FB”は「5バイト文字の開始バイト」、“FC”〜“FD”は「6バイト文字の開始バイト」である。
ここで、「多バイト文字の2バイト目以降のバイトコード」は、2バイト以上の文字の2バイト目以降で用いられるバイトコードであり、文字コードの先頭では用いられない。換言すれば、「多バイト文字の2バイト目以降のバイトコード」が文字コードの先頭で用いられる場合、当該文字コードと他の文字の文字コードとの混同が生じない。
そこで、一実施形態においては、半角カナの文字コードを変換規則に基づき「多バイト文字の2バイト目以降のバイトコード」域に割り当てることにより、3バイトの文字コードから1バイトの文字コードへの圧縮を行なう。
換言すれば、変換規則は、所定の文字コード体系において2バイト以上のバイトコードに対応する文字と前記所定の文字コード体系における多バイト文字の上位から2バイト目以降のバイトコードに用いられる1バイトのコードとの対応関係を示す情報である。
これにより、半角カナ以外の他の文字種との混合を可能とし、圧縮及び復元において処理可能な文字種の制限を無くすことができる。また、圧縮済の文字コードを判別できるため、圧縮又は復元等を正しく行なうことができ、圧縮状態の管理が不要となることでリソースを効率的に利用することができる。従って、上述した不都合を解消しつつ文字コードのバイト数を削減することができる。
さらに、文字コード体系を例えばシフトJISからUTF−8に変更する場合、開発環境のコンパイラ及び運用環境のランタイムシステムに文字コードの圧縮及び復元に関する修正を加えればよい。このように、既存のプログラムの改修が不要であるため、改修コストを削減することができる。
〔2−1〕一実施形態に係るシステムの構成例
図6は一実施形態に係るシステム1の構成例を示す図である。システム1は、プログラム、例えばCOBOLプログラムの開発環境及びコンパイルされたプログラムを利用して運用を行なう運用環境をそなえてよい。図6に示すように、情報処理システム1は、例示的に、少なくとも1つ(図6では2つ)の処理装置2及び3をそなえる。
処理装置2はプログラムの開発環境を提供する情報処理装置の一例であり、処理装置3はプログラムの運用環境を提供する情報処理装置の一例である。なお、システム1に複数の処理装置3がそなえられてもよい。また、処理装置2及び1以上の処理装置3の機能は、1以上の装置で実行されるアプリケーション又は仮想マシン(VM;Virtual Machine)として実現されてもよい。処理装置2及び3としては、例えばサーバやPersonal Computer(PC)等の装置が挙げられる。
処理装置2及び3の各々は、互いに同様のハードウェア構成をそなえることができる。以下、処理装置2及び3を区別しない場合には、処理装置5と表記する。処理装置5は、図7に例示するように、CPU(Central Processing Unit)5a、メモリ5b、記憶部5c、インタフェース部5d、入出力部5e、及び読取部5fをそなえる。
CPU5aは、種々の制御や演算を行なう演算処理装置(プロセッサ)の一例である。CPU5aは、処理装置5内の各ブロックとバスで相互に通信可能に接続されてよい。なお、演算処理装置としては、CPU5aに代えて、電子回路、例えばMPU(Micro Processing Unit)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)等の集積回路(IC)が用いられてもよい。
メモリ5bは、種々のデータやプログラムを格納するハードウェアの一例である。メモリ5bとしては、例えばRAM(Random Access Memory)等の揮発性メモリが挙げられる。
記憶部5cは、種々のデータやプログラム等を格納するハードウェアの一例である。なお、図6に示す記憶装置42及び45は記憶部5cによって実現されてもよい。記憶部5cとしては、例えばHDD(Hard Disk Drive)等の磁気ディスク装置、SSD(Solid State Drive)等の半導体ドライブ装置、フラッシュメモリやROM(Read Only Memory)等の不揮発性メモリ等の各種記憶装置が挙げられる。
例えば記憶部5cは、処理装置2又は3の各種機能の全部若しくは一部を実現する処理プログラム50を格納することができる。CPU5aは、例えば記憶部5cに格納された処理プログラム50をメモリ5bに展開して実行することにより、処理装置2又は3の機能を実現することができる。なお、処理装置2及び3が別個の装置により実現される場合には、処理プログラム50はこれらの機能に分割されてそれぞれ処理装置2及び3に提供されてもよいし、処理装置2及び3の双方に処理プログラム50が提供されてもよい。
インタフェース部5dは、他の処理装置5や、図示しないネットワーク又は作業者の作業端末等との間の接続及び通信の制御等を行なう通信インタフェースの一例である。例えばインタフェース部5dは、LAN(Local Area Network)、SAS、FC(Fibre Channel)、インフィニバンド(InfiniBand)、USB(Universal Serial Bus)、BLUETOOTH(登録商標)、パラレルバス等に準拠したアダプタが挙げられる。なお、SASはSerial Attached SCSI(Small Computer System Interface)の略称である。
なお、処理プログラム50、プログラム21、又はコンパイルされたプログラム21(アプリケーション31)は、図示しないネットワークからインタフェース部5dを介して処理装置5にダウンロードされてもよい。
入出力部5eは、マウス、キーボード、操作ボタン等の入力部(例えば図6の入力装置41)、並びにディスプレイやプリンタ等の出力部(例えば図6の表示装置43及び印刷装置44)の少なくとも一部を含むことができる。例えば入力部は、利用者によるアプリケーション31への設定の登録や変更、パラメータ入力等の各種操作に用いられてもよく、出力部は、アプリケーション31からの出力結果の表示等に用いられてもよい。
読取部5fは、記録媒体5gに記録されたデータやプログラムを読み出すリーダの一例である。読取部5fは、コンピュータ読取可能な記録媒体5gを接続又は挿入可能な接続端子又は装置を含んでよい。読取部5fとしては、例えばUSB等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、SDカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体5gには処理プログラム50が格納されてもよい。
上述した処理装置5のハードウェア構成は例示である。従って、他の処理装置5間、又は、処理装置5内でのハードウェアの増減(例えば任意のブロックの追加や省略)、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。
図6の説明に戻り、処理装置2は、例示的に、プログラム21及びコンパイラ22をそなえる。プログラム21は所定の機能を実現するコンピュータプログラムの一例である。一実施形態において、プログラム21は、例えば文字コード体系としてUTF−8を採用したCOBOLプログラムである。プログラム21は、圧縮及び復元対象となる所定の文字列、例えば半角カナの文字種の文字列をソースコード内に含んでもよく、当該所定の文字列が、プログラム21に入力される文字列又はプログラム21の出力する文字列として許容されてもよい。
コンパイラ22は、プログラム21のコンパイルを行なうソフトウェアの一例である。一実施形態において、コンパイラ22は、例えばCOBOLコンパイラである。
コンパイラ22は、例示的に、定数取出部23、圧縮処理部24、及びオブジェクトファイル出力処理部25をそなえる。
定数取出部23は、プログラム21から定数を取り出して圧縮処理部24へ出力する。定数取出部23がプログラム21から取り出す定数には、例えば圧縮及び復元対象となる所定の文字列が含まれてよい。
圧縮処理部24は、定数取出部23から入力される定数を所定の変換規則に基づき圧縮し、圧縮した定数をプログラム21とともにオブジェクトファイル出力処理部25へ出力する。圧縮処理部24による圧縮処理では、図6に示す圧縮情報24aが参照されてもよい。なお、圧縮処理部24による圧縮処理の詳細については後述する。
オブジェクトファイル出力処理部25は、圧縮処理部24から入力されるプログラム21をコンパイルし、コンパイルして得られるオブジェクトファイルに圧縮された定数を格納して処理装置3へ出力する。オブジェクトファイル出力処理部25によるコンパイルでは、プログラム21のソースコードを解析して、コンピュータにより実行可能な形式のオブジェクトファイルに変換する処理が行なわれる。なお、コンパイルは既知の種々の手法により行なうことが可能であり、その詳細な説明は省略する。
なお、上述したプログラム21及びコンパイラ22等のコンピュータプログラム、並びに圧縮情報24a等の情報は、例えばメモリ5b又は記憶部5cの記憶領域に記憶されてよい。
処理装置3は、例示的に、アプリケーション31、ランタイムシステム35、入力装置41、記憶装置42及び45、表示装置43、並びに印刷装置44をそなえる。
アプリケーション31は、CPU5aによって実行されることにより所定の機能を実現するソフトウェアの一例であり、コンパイラ22から出力されるオブジェクトファイルの一例である。一実施形態において、アプリケーション31は、例えばCOBOLアプリケーションである。
アプリケーション31は、例示的に、外部入力要求部32、データ操作部33、及び外部出力要求部34をそなえる。
外部入力要求部32は、ランタイムシステム35に対してアプリケーション31への種々の入力を要求する。入力の要求には、ディスプレイ等の表示装置に画面入力又は外部入力を促す表示を行なう入力画面の情報が含まれてもよい。なお、アプリケーション31への入力には、利用者からの画面操作による指示やパラメータのほか、文字列やデータ等のファイルが含まれてよい。
データ操作部33は、外部入力要求部32により取得された入力情報に基づき所定の操作を行なうことにより、アプリケーション31に設定された所定の機能を実現する。なお、データ操作部33の処理の過程で新たな入力情報がリクエストされる場合には、外部入力要求部32によってランタイムシステム35に対して新たな入力が要求されてもよい。
外部出力要求部34は、ランタイムシステム35に対してデータ操作部33の実行結果の出力を要求する。アプリケーション31からの出力態様には、画面出力や印刷、データの格納等が含まれてよい。
ランタイムシステム35は、アプリケーション31の実行環境を提供するソフトウェアの一例である。ランタイムシステム35は、例示的に、入力処理部36、圧縮処理部37、出力処理部38、及び復元処理部39をそなえる。
入力処理部36は、アプリケーション31からの要求に応じて入力情報を取得し、外部入力要求部32へ応答する。一例として、入力処理部36は、画面入力部36a及び外部入力部36bをそなえる。
画面入力部36aは、ディスプレイ等の出力装置に対して指示又はパラメータ等の入力情報の入力画面を表示させ、入力装置41に入力された入力情報を取得することができる。外部入力部36bは、記憶装置42等から入力されるファイルを入力情報として取得することができる。
圧縮処理部37は、入力処理部36により入力装置41又は記憶装置42等から取得された入力情報に含まれる所定の文字列を所定の変換規則に基づき圧縮し、所定の文字列を圧縮した入力情報を入力処理部36へ出力する。圧縮処理部37による圧縮処理では、図6に示す圧縮情報37aが参照されてもよい。圧縮処理は、コンパイラ22がそなえる圧縮処理部24の圧縮処理と同様であってよい。なお、例えば記憶装置42から取得された入力情報に含まれる所定の文字列が圧縮後の状態である場合には、圧縮処理部37による圧縮処理が省略されてもよい。圧縮処理部37による圧縮処理の詳細については後述する。
出力処理部38は、アプリケーション31からの要求に応じて、指定された態様で出力結果を含む出力情報を出力装置、例えば表示装置43、印刷装置44、及び記憶装置45の少なくとも1つへ出力する。一例として、出力処理部38は、画面出力部38a、印刷出力部38b、外部出力部38cをそなえる。
画面出力部38aは、出力結果を含む出力画面を生成してディスプレイ等の表示装置43に対して出力画面を表示させることができる。印刷出力部38bは、出力結果を含む印刷レイアウトを生成して印刷装置44に印刷させることができる。外部出力部38cは、出力結果を含む出力ファイルを生成して記憶装置45に格納させることができる。
復元処理部39は、出力処理部38から出力された出力情報に含まれる所定の文字列を所定の変換規則に基づき復元し、所定の文字列を復元した出力情報を出力装置へ出力する。復元処理部39による復元処理では、図6に示す復元情報39aが参照されてもよい。なお、例えば出力ファイルが記憶装置45へ格納される場合であって、所定の文字列を圧縮状態で格納する場合には、復元処理部39による復元処理が省略されてもよい。復元処理部39による復元処理の詳細については後述する。
なお、上述したアプリケーション31及びランタイムシステム35等のコンピュータプログラム、並びに圧縮情報37a及び復元情報39a等の情報は、例えばメモリ5b又は記憶部5cの記憶領域に記憶されてよい。
〔2−2〕圧縮処理及び復元処理の説明
以下、一実施形態に係る圧縮処理部24及び37による圧縮処理、並びに、復元処理部39による復元処理の一例について説明する。
なお、以下に詳述する変換規則は、変換前後の文字コードの対応関係を示す情報を予め処理装置5のメモリ5b等に記憶しておき、圧縮処理又は復元処理の際に圧縮処理部24及び37、又は、復元処理部39が参照するようにしてもよい。この場合、対応関係を示す情報としては、例えば図6に示す圧縮情報24a及び37a並びに復元情報39a(以下、これらをまとめて変換情報と表記する場合がある)、又は、変換規則の論理を含むモジュール等が挙げられる。
或いは、対応関係を示す情報として、変換規則の論理(ロジック)を予め圧縮処理部24及び37、又は、復元処理部39に組み込んでもよい。この場合、処理装置2及び3は変換情報やモジュール等を保持しなくてもよい。
以下の説明において、圧縮処理部24及び37又は復元処理部39が文字コードの対応関係を示す情報を参照することには、変換情報又はモジュールを読み込むこと、並びに、組み込まれた変換規則の論理を適用すること、の少なくとも1つが含まれるものとする。
UTF−8の文字コード体系における半角カナの文字コードの圧縮及び復元は、種々の手法によって実現される。以下、2つの例を挙げて説明する。なお、UTF−8における半角カナの文字コードの範囲は、“0xEFBDA1”〜“0xEFBDBF”及び“0xEFBE80”〜“0xEFBE9F”の2つのバイト域である。
〔2−2−1〕第1の手法
第1の手法では、圧縮処理部24及び37は、UTF−8の文字コード体系において、半角カナを表す文字コードの先頭の2バイトを取り除く、換言すれば最下位バイト以外のバイトコードを削除することにより文字コードの圧縮を実現する。また、復元処理部39は、圧縮済の半角カナを表す1バイトの文字コードに対して、圧縮処理において取り除いた2バイトを上位バイトとして付加又は加算することにより文字コードの復元を実現する。
一例として、図8に示すように、圧縮処理部24及び37は、UTF−8の半角カナの文字コードについて、先頭の2バイトの“0xEFBD”又は“0xEFBE”を取り除くことにより、以下のように3バイトで表現される半角カナを1バイトに圧縮することができる。
変換前 :変換後
“0xEFBDA1”〜“0xEFBDBF”(第1コード域) :“0xA1”〜“0xBF”
“0xEFBE80”〜“0xEFBE9F”(第2コード域) :“0x80”〜“0x9F”
第1の手法に係る変換規則の一例を図9及び図10に示す。図9に示すように、変換後の半角カナの文字コードの範囲は“0xA1”〜“0xBF”及び“0x80”〜“0x9F”である。このように、変換後の文字コードの範囲が図8に例示する「多バイト文字の2バイト目以降のバイトコード」域に含まれることがわかる。
なお、圧縮処理部24及び37の各々は、圧縮処理において半角カナの3バイトの文字コードを認識した場合、図9にテーブル形式で例示する圧縮情報24a及び37aを参照してもよい。又は、圧縮処理部24及び37の各々は、変換規則の論理に基づき、当該文字コードから上位2バイトを削除(例えば、単に“0xEFBD”若しくは“0xEFBE”を除去、又は、“0xEFBD00”若しくは“0xEFBE00”を減算)してもよい。
復元処理部39は、復元処理において圧縮済の半角カナの1バイトの文字コードを認識した場合、図10にテーブル形式で例示する復元情報39aに基づき変換を行なってもよい。又は、復元処理部39は、変換規則の論理に基づき、当該文字コードに対して上位2バイトを付加(例えば、単に“0xEFBD”若しくは“0xEFBE”を付加、又は、“0xEFBD00”若しくは“0xEFBE00”を加算)してもよい。
なお、圧縮情報24a及び37aと復元情報39aとは、変換前後の文字コードが入れ替わった情報であるため、ランタイムシステム35は、圧縮情報37a及び復元情報39aの一方を記憶してもよい。また、圧縮情報24a及び37a並びに復元情報39aの各々は、コード域ごとに別個の情報として管理されてもよい。
〔2−2−2〕第2の手法
第2の手法では、圧縮処理部24及び37は、UTF−8の文字コード体系において、半角カナを表す2つのバイト域の文字コードを、文字の大小関係を保持した状態で「多バイト文字の2バイト目以降のバイトコード」域に収まるように割り当て、文字コードの圧縮を実現する。また、復元処理部39は、圧縮済の半角カナを表す1バイトの文字コードに対して圧縮処理とは逆の変換を行ない、文字コードの復元を実現する。
一例として、図11に示すように、圧縮処理部は、UTF−8の半角カナの文字コードについて、以下のように3バイトで表現される半角カナを1バイトに圧縮することができる。
変換前 :変換後
“0xEFBDA1”〜“0xEFBDBF”(第1コード域) :“0x81”〜“0x9F”
“0xEFBE80”〜“0xEFBE9F”(第2コード域) :“0xA0”〜“0xBF”
第2の手法に係る変換規則の一例を図12及び図13に示す。図12に示すように、変換後の半角カナの文字コードの範囲は“0x81”〜“0x9F”及び“0xA0”〜“0xBF”である。このように、変換後の文字コードの範囲が図11に例示する「多バイト文字の2バイト目以降のバイトコード」域に含まれることがわかる。
なお、圧縮処理部24及び37の各々は、圧縮処理において半角カナの3バイトの文字コードを認識した場合、図12にテーブル形式で例示する圧縮情報24a及び37aを参照してもよい。又は、圧縮処理部24及び37の各々は、変換規則の論理に基づき、以下の(1)及び(2)の処理を行なってもよい。
(1)当該文字コードから上位2バイトを削除(例えば、単に“0xEFBD”若しくは“0xEFBE”を除去、又は、“0xEFBD00”若しくは“0xEFBE00”を減算)する、換言すれば2バイト以上のバイトコードの最下位バイト以外のバイトコードを削除する。
(2)下位1バイトの“0xA1”〜“0xBF”から“0x20”を減算する、又は、下位バイトの“0x80”〜“0x9F”に“0x20”を加算する、換言すれば2バイト以上のバイトコードに所定の値を加算又は減算する。
なお、上位(1)において文字コードから“0xEFBD00”若しくは“0xEFBE00”を減算する場合には、上記(2)において減算又は加算する値を含めて、“0xEFBD20”(第1コード域の場合)又は“EFBDE0”(第2コード域の場合)を減算することとしてもよい。
復元処理部39は、復元処理において圧縮済の半角カナの1バイトの文字コードを認識した場合、図13にテーブル形式で例示する復元情報39aに基づき変換を行なってもよいし、変換規則の論理に基づき、以下の(3)及び(4)の処理を行なってもよい。
(3)当該文字コードの“0x81”〜“0x9F”に“0x20”を加算する、又は、当該文字コードの“0xA0”〜“0xBF”から“0x20”を減算する。
(4)当該文字コードに上位2バイトを付加(例えば、単に“0xEFBD”若しくは“0xEFBE”を付加、又は、“0xEFBD00”若しくは“0xEFBE00”を加算)する。
なお、上位(4)において文字コードに“0xEFBD00”若しくは“0xEFBE00”を加算する場合には、上記(3)において加算又は減算する値を含めて、“0xEFBD20”(第1コード域の場合)又は“EFBDE0”(第2コード域の場合)を加算することとしてもよい。
ここで、第2の手法において、変換前の半角カナの文字コードはコード値の昇順に“0xEFBDA1”〜“0xEFBDBF”(第1コード域)、“0xEFBE80”〜“0xEFBE9F”(第2コード域)である。対応する変換後の半角カナの文字コードは“0x81”〜“0x9F”、“0xA0”〜“0xBF”であり、コード値の順序が変換前と同様に昇順である。このように、第2の手法によれば、文字コードの順序が文字コードの圧縮前後で変化しない。
アプリケーション31において、半角カナは文字列の読み仮名として利用される場合がある。半角カナが読み仮名として利用される場合、読み仮名の文字コードの大小に基づくソートが行なわれることがある。
一例として、半角カナ“ア”の文字コードを“0xEFBDB1”から“0xB1”に圧縮(“0xEFBD”を除去)し、半角カナ“タ”の文字コードを“0xEFBE80”から“0x80”に圧縮(“0xEFBE”を除去)した場合、以下のように圧縮前後で半角カナの文字コードの大小関係が崩れる。
変換前:ア[0xEFBDB1] < タ[0xEFBE80]
変換後:ア[0xB1] > タ[0x80]
このように、圧縮前後で半角カナの文字コードの大小関係が崩れると、コード域の異なる半角カナが混在する場合、圧縮前後で読み仮名のソート結果が異なる場合がある。
これに対し、第2の手法によれば、圧縮前後でも半角カナの文字コードの大小関係を保持できるため、読み仮名のソート結果に影響を与えず、利便性を損なわずに済む。
〔2−3〕一実施形態に係る圧縮前後の文字コードについて
次に、一実施形態に係る圧縮前後の文字コードの扱いについて説明する。なお、便宜上、圧縮及び復元の変換規則として第2の手法を用いて説明するが、第1の手法を用いる場合も圧縮後の文字コードが異なるものの基本的に同様の処理である。
一例として、半角カナの文字列“テスト”の文字コードをそれぞれ圧縮する場合、第2の手法によれば、図14及び以下に示すように圧縮後のコード列は“0xA39DA4”となる。
変換前 :変換後
“テ”:“0xEFBE83” :“0xA3”
“ス”:“0xEFBDBD” :“0x9D”
“ト”:“0xEFBE84” :“0xA4”
圧縮後のバイト列に含まれる“A3 9D”(16進表記、以下同様)は、図14に示す全角漢字のコード“E3 A3 9D”の一部である。しかし、“テスト”の直前に最後が“E3”となるコードは、UTF−8の文字コード体系の理論上、出現しない。図14の1バイトコード表に示すように、“0xE3”は「3byte文字の開始バイト」として規定されており、多バイト文字の開始バイト(“0xC0”〜“0xFD”)はバイト列の末尾にはなり得ないからである。
なお、“0x00”〜“0x7F”に規定された制御コード及びASCIIは1バイト文字(コード)であり、圧縮後のバイト列の直前に出現しても1バイト文字(コード)と解釈されるため、圧縮後のバイト列と混在しても誤って解釈されずに済む。
例えば、図15に示すように、変換後の“テストb”のコード列“A3 9D A4 62”のうちの変換対象である半角カナに相当する“A3 9D A4”は、その文字位置から、変換前の文字で該当する文字は存在しない。一方、変換対象ではないASCIIの“b”に相当する“62”は、同じ文字“b”に割り当てられている。
このように、圧縮後のバイト列と他のUTF−8の文字のバイト列とが混在しても、復元処理部39は圧縮後のバイト列を正しく復元することができる。
また、上述のように、圧縮後のバイト列と圧縮前のバイト列及び圧縮非対象のバイト列との混在が許容される。従って、図16に例示するように、圧縮処理部24及び37並びに復元処理部39は、圧縮前後の文字及び圧縮非対象の文字が混合されたデータ(以下、混合データと表記する)に対して、圧縮又は復元を繰り返し実施しても正しく変換を行なうことができる。換言すれば、バイト列から文字の圧縮状態(圧縮対象、圧縮非対象(圧縮不要)、圧縮済等)を判別することが可能となり、文字ごとに圧縮状態を管理しなくてもよい。
なお、混合データが生成される場合としては、例えば図17に示すケースが挙げられる。図17の例では、以下の(i)〜(iv)の処理が行なわれる。
(i)アプリケーションA(アプリケーション31)が、圧縮後の“Aアイ”という文字列を記憶するファイルA(例えば記憶装置42が記憶する圧縮後データファイル)を開く。
(ii)アプリケーションAが圧縮後の“Bカキ”という文字列をファイルAのレコードAに書き込み、混合データファイルとして上書きして閉じる。
(iii)アプリケーションB(アプリケーション31)が、ファイルA(混合データファイル)を開き、読み込む。
(iv)アプリケーションBが、レコードAのデータを表示装置43に表示させる。
ここで、上記(ii)の処理において、アプリケーションAを操作する利用者が圧縮後データファイルであるファイルAを開いたにもかかわらず、“Bカキ”のデータを追加する際に誤って“Bカキ”の復元指示をした場合を想定する。
復元処理部39は、上記(ii)の過程で圧縮後の“Bカキ”のバイト列“42 86 87”(16進表記、以下同様)を“42 EFBDB6 EFBDB7”に復元して、復元後のバイト列をファイルAに追加する。これにより、圧縮前後のバイト列及び圧縮非対象のバイト列が混在した混合データが生成される。
このように混合データが生成された場合であっても、上記(iii)の過程でアプリケーションBが混合データファイルであるファイルAを開く際に、圧縮処理部37は、“Bカキ”のバイト列を“42 86 87”に正しく圧縮する。また、上記(iv)の過程でアプリケーションBがレコードAのデータを表示装置43に表示させる際にも、復元処理部39は、“Aアイ”及び“Bカキ”のバイト列を“41 EFBDB1 EFBDB2”及び“42 EFBDB6 EFBDB7”に正しく復元する。
このように、圧縮処理部37及び復元処理部39は、圧縮前後のバイト列から文字の切れ目を判別することができるため、複数バイトの1つの圧縮対象外の文字であるのか、複数個の圧縮後の文字であるのかを判断することができる。このため、混合データに対して圧縮及び復元を正しく行なうことができる。
従って、図17に例示した場合のほか、例えば図18に示すように、圧縮前データに圧縮後の文字を挿入した場合や圧縮後データに圧縮前の文字を挿入した場合においても、混合データに対する圧縮又は復元の繰り返しによるデータ破壊を回避できる。
以上のように、一実施形態によれば、利用者による操作の誤りによってデータ破壊が生じることを回避できる。また、アプリケーション31内で扱われる文字列が圧縮後のデータになるため、半角カナ等の圧縮対象の文字については領域サイズを1文字1バイトとすることができ、リソースの消費量を低減させることができる。
なお、他の文字コード体系、例えばシフトJISや、EBCDIC(Extended Binary Coded Decimal Interchange Code)(カナ)では半角カナを1バイトで表現できる。また、EUCは上述した比較例の手法により混在文字の制限があるものの2バイトの半角カナを1バイトで表現できる。
一実施形態によれば、COBOLプログラム等のプログラム21の改修を行なわずに、半角カナを3バイトで表現するUTF−8等のUnicodeであっても、他の文字コード体系と同様に、半角カナを1文字1バイトで扱うことができる。従って、他の文字コード体系からUnicodeへの移植性を向上させることができる。利用者におけるプログラム21の改修コストが不要になる。
また、1文字1バイトで扱える文字、例えばASCII(“0x20”〜“0x7F”)と半角カナ(“81”〜“BF”)が連続域となることで、ASCII及び半角カナを含む文字の判定が容易となるという効果も奏することができる。
〔2−4〕動作例
次に、上述の如く構成されたシステム1の動作例について説明する。なお、便宜上、以下の動作例では第2の手法を用いて説明するが、第1の手法を用いる場合も圧縮又は復元の際の変換手法が異なるものの基本的に同様の動作である。
〔2−4−1〕開発環境の動作例
はじめに、図19を参照して、開発環境の処理装置2による動作例について説明する。
図19に示すように、コンパイラ22の定数取出部23は、プログラム21から定数となる文字列、例えば半角カナの文字列を取り出す(ステップS1)。次いで、圧縮処理部24が定数となる文字列に対して圧縮処理を行なう(ステップS2)。圧縮処理の詳細については後述する。
オブジェクトファイル出力処理部25は、プログラム21のコンパイルを行ない、コンパイルにより得られたオブジェクトファイル中に、圧縮処理部24が圧縮した定数の値を格納する(ステップS3)。
以上によりコンパイラ22の処理が終了する。なお、生成されたオブジェクトファイルは、例えばコンパイラ22から処理装置2のメモリ5b又は記憶部5cに格納されてよく、処理装置2からアプリケーション31として処理装置3へ出力されてもよい。
〔2−4−2〕開発環境の動作例
次に、図20〜図24を参照して、運用環境の処理装置3による動作例について説明する。
はじめに、処理装置3のアプリケーション31の動作例を説明する。図20に示すように、アプリケーション31が実行されると、アプリケーション31の外部入力要求部32は、ランタイムシステム35に対して外部入力を要求する(ステップS11)。外部入力の要求には、利用者に入力情報の入力を促す入力画面の情報が含まれてもよい。
ランタイムシステム35から入力情報を取得すると、データ操作部33は、入力情報に基づくデータ編集処理を行なう(ステップS12)。なお、データ編集処理の過程で新たな外部入力がリクエストされる場合、データ操作部33は外部入力要求部32を介して新たな入力情報を取得してもよい。
データ操作部33によるデータ編集処理が完了すると、外部出力要求部34は、ランタイムシステム35に対して処理結果を含む出力情報の外部出力を要求する(ステップS13)。以上によりアプリケーション31の処理が終了する。
次いで、処理装置3のランタイムシステム35の動作例を説明する。ランタイムシステム35の入力処理部36は、アプリケーション31から外部入力の要求を受け付けると、当該要求に応じて画面入力処理又は外部入力処理を行なう。
画面入力処理では、図21に示すように、画面入力部36aが利用者により入力装置41に入力された文字列を取得し(ステップS21)、圧縮処理部37は画面入力部36aが取得した文字列に対して圧縮処理を行なう(ステップS22)。圧縮処理部37による圧縮処理が完了すると、画面入力部36aは圧縮された文字列をアプリケーション31に渡し(ステップS23)、画面入力処理が終了する。
外部入力処理では、図22に示すように、外部入力部36bが記憶装置42から入力されたファイル又はDB(Database)から文字列を取得し(ステップS31)、圧縮処理部37は外部入力部36bが取得した文字列に対して圧縮処理を行なう(ステップS32)。圧縮処理部37による圧縮処理が完了すると、外部入力部36bは圧縮された文字列をアプリケーション31に渡し(ステップS33)、外部入力処理が終了する。
また、ランタイムシステム35の出力処理部38は、アプリケーション31から外部出力の要求を受け付けると、当該要求に応じて画面/印刷出力処理又は外部出力処理を行なう。
画面/印刷出力処理では、図23に示すように、画面出力部38a又は印刷出力部38bがアプリケーション31から文字列を含む出力情報を受け取り(ステップS41)、復元処理部39は当該文字列に対して復元処理を行なう(ステップS42)。復元処理部39による復元処理が完了すると、画面出力部38aは出力情報を表示装置43へ出力して画面表示させる。又は、印刷出力部38bが出力情報を印刷装置44へ出力して印刷させる(ステップS43)。以上により画面/印刷出力処理が終了する。
外部出力処理では、図24に示すように、外部出力部38cがアプリケーション31から文字列を含む出力情報を受け取り(ステップS51)、アプリケーション31から復元を指示されているか否かを判定する(ステップS52)。復元指示がない場合(ステップS52のNoルート)、処理がステップS54に移行する。一方、復元指示が有る場合(ステップS52のYesルート)、復元処理部39は当該文字列に対して復元処理を行ない(ステップS53)、処理がステップS54に移行する。
ステップS54では、外部出力部38cは、出力情報を記憶装置45が記憶するファイル又はDBへ出力して格納する。以上により外部出力処理が終了する。
〔2−4−3〕圧縮処理の動作例
次に、図25及び図26を参照して、圧縮処理部24又は37による圧縮処理の動作例について説明する。
図25に示すように、圧縮処理部24又は37は、文字列の先頭から1バイトの文字コードを取得し(ステップS61)、取得した文字コードが半角カナの文字コードであるか否かを判定する(ステップS62)。
取得した文字コードが半角カナの文字コードではない場合(ステップS62のNoルート)、処理がステップS64に移行する。一方、取得した文字コードが半角カナの文字コードである場合(ステップS62のYesルート)、圧縮処理部24又は37は、半角カナを1バイトに圧縮し(ステップS63)、取得した文字コードが最終バイトであるか否かを判定する(ステップS64)。
取得した文字コードが最終バイトではない場合(ステップS64のNoルート)、処理がステップS61に移行し、圧縮処理部24又は37は次の1バイトを取得する。一方、取得した文字コードが最終バイトである場合(ステップS64のYesルート)、圧縮処理が終了する。
図26に圧縮処理のより詳細な動作例を示す。図26に示すように、圧縮処理部24又は37は、文字列の先頭から1バイトの文字コードを取得すると(ステップS71)、取得した文字コードが“0xF0”〜“0xFD”の範囲内であるか否かを判定する(ステップS72)。
取得した文字コードが“0xF0”〜“0xFD”の範囲内である場合(ステップS72のYesルート)、取得した文字コードは4〜6バイト文字の先頭の文字コードである(図5参照)。従って、圧縮処理部24又は37は、取得した文字コード(先頭の文字コード)を含む4〜6バイトについて、変換を行なわずに変換後の文字列に転記する(ステップS73)。
次いで、圧縮処理部24又は37は、取得した文字コードが最終バイトであるか否かを判定する(ステップS74)。取得した文字コードが最終バイトではない場合(ステップS74のNoルート)、処理がステップS71に移行し、圧縮処理部24又は37は次の1バイトを取得する。一方、取得した文字コードが最終バイトである場合(ステップS74のYesルート)、圧縮処理が終了する。
ステップS72において、取得した文字コードが“0xF0”〜“0xFD”の範囲外である場合(ステップS72のNoルート)、圧縮処理部24又は37は、取得した文字コードが“0xE0”〜“0xEE”の範囲内であるか否かを判定する(ステップS75)。
取得した文字コードが“0xE0”〜“0xEE”の範囲内である場合(ステップS75のYesルート)、取得した文字コードは3バイト文字の先頭の文字コードである(図5参照)。従って、圧縮処理部24又は37は、取得した文字コード(先頭の文字コード)を含む3バイトについて、変換を行なわずに変換後の文字列に転記し(ステップS76)、処理がステップS74に移行する。
ステップS75において、取得した文字コードが“0xE0”〜“0xEE”の範囲外である場合(ステップS75のNoルート)、圧縮処理部24又は37は、取得した文字コードが“0xEF”であるか否かを判定する(ステップS77)。
取得した文字コードが“0xEF”である場合(ステップS77のYesルート)、圧縮処理部24又は37は、取得した文字コードよりも1つ下位のバイトの文字コードが“0xBD”であるか否かを判定する(ステップS78)。1つ下位のバイトの文字コードが“0xBD”である場合(ステップS78のYesルート)、圧縮処理部24又は37は、取得した文字コードよりも2つ下位のバイトの文字コードが“0xA1”〜“0xBF”の範囲内であるか否かを判定する(ステップS79)。
ステップS79において、2つ下位のバイトの文字コードが“0xA1”〜“0xBF”(第1コード域)の範囲外である場合(ステップS79のNoルート)、処理がステップS76に移行する。一方、2つ下位のバイトの文字コードが“0xA1”〜“0xBF”の範囲内である場合(ステップS79のYesルート)、取得した文字コードは第1コード域における3バイトの半角カナの先頭の文字コードである(図5参照)。
従って、圧縮処理部24又は37は、例えば取得した文字コード(先頭の文字コード)を含む3バイトについて、圧縮情報24a又は37aに基づき変換を行なう。そして、圧縮処理部24又は37は、変換により1バイトに圧縮された文字コードを変換後の文字列に転記し(ステップS80)、処理がステップS74に移行する。
一方、ステップS78において、1つ下位のバイトの文字コードが“0xBD”ではない場合(ステップS78のNoルート)、1つ下位のバイトの文字コードが“0xBE”であるか否かを判定する(ステップS81)。1つ下位のバイトの文字コードが“0xBE”ではない場合(ステップS81のNoルート)、処理がステップS76に移行する。一方、1つ下位のバイトの文字コードが“0xBE”である場合(ステップS81のYesルート)、圧縮処理部24又は37は、2つ下位のバイトの文字コードが“0x80”〜“0x9F”の範囲内であるか否かを判定する(ステップS82)。
2つ下位のバイトの文字コードが“0x80”〜“0x9F”の範囲外である場合(ステップS82のNoルート)、処理がステップS76に移行する。一方、2つ下位のバイトの文字コードが“0x80”〜“0x9F”の範囲内である場合(ステップS82のYesルート)、取得した文字コードは第2コード域における3バイトの半角カナの先頭の文字コードである(図5参照)。
従って、圧縮処理部24又は37は、例えば取得した文字コード(先頭の文字コード)を含む3バイトについて、圧縮情報24a又は37aに基づき変換を行なう。そして、圧縮処理部24又は37は、変換により1バイトに圧縮された文字コードを変換後の文字列に転記し(ステップS83)、処理がステップS74に移行する。
ステップS77において、取得した文字コードが“0xEF”ではない場合(ステップS77のNoルート)、圧縮処理部24又は37は、取得した文字コードが“0xC0”〜“0xDF”の範囲内であるか否かを判定する(ステップS84)。
取得した文字コードが“0xC0”〜“0xDF”の範囲内である場合(ステップS84のYesルート)、取得した文字コードは2バイト文字の先頭の文字コードである(図5参照)。従って、圧縮処理部24又は37は、取得した文字コード(先頭の文字コード)を含む2バイトについて、変換を行なわずに変換後の文字列に転記し(ステップS85)、処理がステップS74に移行する。
一方、取得した文字コードが“0xC0”〜“0xDF”の範囲外である場合(ステップS84のNoルート)、取得した文字コードは1バイト文字の文字コードである(図5参照)。従って、圧縮処理部24又は37は、取得した文字コードについて、変換を行なわずに変換後の文字列に転記し(ステップS86)、処理がステップS74に移行する。
以上により、圧縮処理部24又は37による圧縮処理が終了する。なお、文字コードの圧縮の手法はステップS80及びS83における説明に限定されるものではない。例えば圧縮情報24a又は37aを用いずに、予め圧縮処理部24又は37に設定された論理やモジュール等に基づき、取得した文字コード(先頭の文字コード)を含む3バイトに所定の値を減算又は加算して変換を行なってもよい。或いは、取得した文字コード(先頭の文字コード)を含む上位2バイト(1つ下位のバイトまで)を読み捨て、2つ下位のバイトに所定の値を減算又は加算してもよい。
このように、圧縮処理部24又は37は、バイトコードを変換する処理の際に、変換対象の2バイト以上のバイトコードが出現した場合には、出現した2バイト以上のバイトコードを、変換規則において、対応する2バイト目以降のバイトコードに用いられる1バイトのコードに変換する変換部の一例である。
従って、圧縮処理部24又は37によれば、アプリケーション31のデータ操作部33が文字列を扱う前にUTF−8で表現された文字列中の半角カナを1バイトで表現できるようになる。
〔2−4−4〕復元処理の動作例
次に、図27及び図28を参照して、復元処理部39による復元処理の動作例について説明する。
図27に示すように、復元処理部39は、文字列の先頭から1バイトの文字コードを取得し(ステップS91)、取得した文字コードが圧縮済の半角カナの文字コードであるか否かを判定する(ステップS92)。
取得した文字コードが圧縮済の半角カナの文字コードではない場合(ステップS92のNoルート)、処理がステップS94に移行する。一方、取得した文字コードが圧縮済の半角カナの文字コードである場合(ステップS92のYesルート)、復元処理部39は、圧縮済の1バイトの半角カナを3バイトに復元し(ステップS93)、取得した文字コードが最終バイトであるか否かを判定する(ステップS94)。
取得した文字コードが最終バイトではない場合(ステップS94のNoルート)、処理がステップS91に移行し、復元処理部39は次の1バイトを取得する。一方、取得した文字コードが最終バイトである場合(ステップS94のYesルート)、復元処理が終了する。
図28に復元処理のより詳細な動作例を示す。図28に示すように、復元処理部39は、文字列の先頭から1バイトの文字コードを取得すると(ステップS101)、取得した文字コードが“0xF0”〜“0xFD”の範囲内であるか否かを判定する(ステップS102)。
取得した文字コードが“0xF0”〜“0xFD”の範囲内である場合(ステップS102のYesルート)、取得した文字コードは4〜6バイト文字の先頭の文字コードである(図5参照)。従って、復元処理部39は、取得した文字コード(先頭の文字コード)を含む4〜6バイトについて、変換を行なわずに変換後の文字列に転記する(ステップS103)。
次いで、復元処理部39は、取得した文字コードが最終バイトであるか否かを判定する(ステップS104)。取得した文字コードが最終バイトではない場合(ステップS104のNoルート)、処理がステップS101に移行し、復元処理部39は次の1バイトを取得する。一方、取得した文字コードが最終バイトである場合(ステップS104のYesルート)、復元処理が終了する。
ステップS102において、取得した文字コードが“0xF0”〜“0xFD”の範囲外である場合(ステップS102のNoルート)、復元処理部39は、取得した文字コードが“0xE0”〜“0xEE”の範囲内であるか否かを判定する(ステップS105)。
取得した文字コードが“0xE0”〜“0xEE”の範囲内である場合(ステップS105のYesルート)、取得した文字コードは3バイト文字の先頭の文字コードである(図5参照)。従って、復元処理部39は、取得した文字コード(先頭の文字コード)を含む3バイトについて、変換を行なわずに変換後の文字列に転記し(ステップS106)、処理がステップS104に移行する。
ステップS105において、取得した文字コードが“0xE0”〜“0xEE”の範囲外である場合(ステップS105のNoルート)、復元処理部39は、取得した文字コードが“0xC0”〜“0xDF”の範囲内であるか否かを判定する(ステップS107)。
取得した文字コードが“0xC0”〜“0xDF”の範囲内である場合(ステップS107のYesルート)、取得した文字コードは2バイト文字の先頭の文字コードである(図5参照)。従って、復元処理部39は、取得した文字コード(先頭の文字コード)を含む2バイトについて、変換を行なわずに変換後の文字列に転記し(ステップS108)、処理がステップS104に移行する。
一方、取得した文字コードが“0xC0”〜“0xDF”の範囲外である場合(ステップS107のNoルート)、復元処理部39は、取得した文字コードが“0x81”〜“0xBF”の範囲内であるか否かを判定する(ステップS109)。
取得した文字コードが“0x81”〜“0xBF”の範囲内である場合(ステップS109のYesルート)、取得した文字コードは「多バイト文字の2バイト目以降のバイトコード」に割り当てられた圧縮済の半角カナの文字コードである(図5及び図11参照)。従って、復元処理部39は、取得した文字コードについて、復元情報39aに基づき変換を行なう(ステップS110)。そして、復元処理部39は、変換により3バイトに復元された文字コードを変換後の文字列に転記し、処理がステップS104に移行する。
ステップS109において、取得した文字コードが“0x81”〜“0xBF”の範囲外である場合(ステップS109のNoルート)、取得した文字コードは1バイト文字の文字コードである(図5参照)。従って、復元処理部39は、取得した文字コードについて、変換を行なわずに変換後の文字列に転記し(ステップS111)、処理がステップS104に移行する。
以上により、復元処理部39による復元処理が終了する。なお、文字コードの復元の手法はステップS110における説明に限定されるものではない。例えば復元情報39aを用いずに、予め復元処理部39に設定された論理やモジュール等に基づき、取得した文字コードに所定の値を加算又は減算して変換を行なってもよい。或いは、取得した文字コードに対して、復元後の上位2バイトとなる文字コードを付加して、取得した文字コードに所定の値を加算又は減算してもよい。
このように、復元処理部39によれば、文字列に対応したバイトコードを解釈する際に、所定の条件を満たす場合に、変換規則に従い圧縮処理部24又は37が割り当てを行なった1バイト表現での半角カナの文字であると判定又は解釈することができる。ここで、所定の条件としては、1バイトコード表において「多バイト文字の2バイト目以降のバイトコード」の範囲に含まれる1バイトのコードが、その前に「複数バイト文字の開始バイト」に対応する1バイトコードが先に出現することなく出現した場合が挙げられる。
換言すれば、復元処理部39は、バイトコードを解釈する処理の際に、2バイト目以降のバイトコードに用いられる1バイトのコードが最上位バイトのバイトコードとして出現した場合には、変換規則において、出現した2バイト目以降のバイトコードに用いられる1バイトのコードに対応する文字であると解釈する解釈部の一例である。
従って、復元処理部39により、アプリケーション31からの出力情報を表示装置43や印刷装置44等に出力する場合であっても、圧縮済の半角カナをUTF−8の表現(3バイト表現)に戻すことができ、文字を可読化することができる。
〔3〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
例えば、図6に示す処理装置2又は3の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
また、一実施形態においてはUTF−8等のUnicodeを例に挙げて説明したが、これに限定されるものではない。一実施形態に係る手法は、UTF−8以外の文字コード体系であっても、1文字を可変バイトで表現し、「多バイト文字のx(x;2以上の自然数)バイト目のバイトコード」、換言すれば2バイト目以降のバイトコードに用いられる1バイトのコードが他の文字コードの1バイト目に出現する文字コードと重複しない文字コード体系に対して適用可能である。
〔4〕付記
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
コンピュータに、
記憶部に記憶された、所定の文字コード体系において2バイト以上のバイトコードに対応する文字と前記所定の文字コード体系における多バイト文字の上位から2バイト目以降のバイトコードに用いられる1バイトのコードとの対応関係を示す情報を参照し、
バイトコードを解釈する処理の際に、前記2バイト目以降のバイトコードに用いられる1バイトのコードが最上位バイトのバイトコードとして出現した場合には、前記対応関係を示す情報において、出現した前記2バイト目以降のバイトコードに用いられる1バイトのコードに対応する文字であると解釈する、
処理を実行させることを特徴とする、文字コード処理プログラム。
(付記2)
コンピュータに、
バイトコードを変換する処理の際に、変換対象の2バイト以上のバイトコードが出現した場合には、出現した前記2バイト以上のバイトコードを、前記対応関係を示す情報において、対応する2バイト目以降のバイトコードに用いられる1バイトのコードに変換する、
処理を実行させることを特徴とする、付記1記載の文字コード処理プログラム。
(付記3)
前記変換は、前記2バイト以上のバイトコードの最下位バイト以外のバイトコードを削除することを含むことを特徴とする、付記2記載の文字コード処理プログラム。
(付記4)
前記変換は、前記2バイト以上のバイトコードに所定の値を加算又は減算することを含むことを特徴とする、付記2又は付記3記載の文字コード処理プログラム。
(付記5)
前記対応関係を示す情報において、複数の前記2バイト以上のバイトコードに対応する文字間のバイトコードの値の大小関係と、複数の前記2バイト目以降のバイトコードに用いられる1バイトのコード間の大小関係とが等しいことを特徴とする、付記1〜4のいずれか1項記載の文字コード処理プログラム。
(付記6)
前記所定の文字コード体系において1バイトのバイトコードに対応する複数の文字の文字のコード域と、前記対応関係を示す情報における複数の前記2バイト目以降のバイトコードに用いられる1バイトのコード域とが連続した領域であることを特徴とする、付記1〜5のいずれか1項記載の文字コード処理プログラム。
(付記7)
前記所定の文字コード体系は、1文字を可変バイトで表現し、前記2バイト目以降のバイトコードに用いられる1バイトのコードが他の文字のバイトコードの1バイト目に出現するバイトコードと重複しない文字コード体系であることを特徴とする、付記1〜6のいずれか1項記載の文字コード処理プログラム。
(付記8)
前記所定の文字コード体系は、UTF−8(Unicode Transformation Format-8)であり、
前記2バイト以上のバイトコードに対応する文字は3バイトの半角カナ文字である、
ことを特徴とする、付記7記載の文字コード処理プログラム。
(付記9)
所定の文字コード体系において2バイト以上のバイトコードに対応する文字と前記所定の文字コード体系における多バイト文字の上位から2バイト目以降のバイトコードに用いられる1バイトのコードとの対応関係を示す情報を記憶する記憶部と、
バイトコードを解釈する処理の際に、前記2バイト目以降のバイトコードに用いられる1バイトのコードが最上位バイトのバイトコードとして出現した場合には、前記対応関係を示す情報において、出現した前記2バイト目以降のバイトコードに用いられる1バイトのコードに対応する文字であると解釈する解釈部と、
をそなえることを特徴とする、情報処理装置。
(付記10)
バイトコードを変換する処理の際に、変換対象の2バイト以上のバイトコードが出現した場合には、出現した前記2バイト以上のバイトコードを、前記対応関係を示す情報において、対応する2バイト目以降のバイトコードに用いられる1バイトのコードに変換する変換部をさらにそなえることを特徴とする、付記9記載の情報処理装置。
(付記11)
前記変換部は、前記2バイト以上のバイトコードの最下位バイト以外のバイトコードを削除することで前記変換を行なうことを特徴とする、付記10記載の情報処理装置。
(付記12)
前記変換部は、前記2バイト以上のバイトコードに所定の値を加算又は減算することで前記変換を行なうことを特徴とする、付記10又は付記11記載の情報処理装置。
(付記13)
前記対応関係を示す情報において、複数の前記2バイト以上のバイトコードに対応する文字間のバイトコードの値の大小関係と、複数の前記2バイト目以降のバイトコードに用いられる1バイトのコード間の大小関係とが等しいことを特徴とする、付記9〜12のいずれか1項記載の情報処理装置。
(付記14)
前記所定の文字コード体系において1バイトのバイトコードに対応する複数の文字の文字のコード域と、前記対応関係を示す情報における複数の前記2バイト目以降のバイトコードに用いられる1バイトのコード域とが連続した領域であることを特徴とする、付記9〜13のいずれか1項記載の情報処理装置。
(付記15)
前記所定の文字コード体系は、1文字を可変バイトで表現し、前記2バイト目以降のバイトコードに用いられる1バイトのコードが他の文字のバイトコードの1バイト目に出現するバイトコードと重複しない文字コード体系であることを特徴とする、付記9〜14のいずれか1項記載の情報処理装置。
(付記16)
前記所定の文字コード体系は、UTF−8(Unicode Transformation Format-8)であり、
前記2バイト以上のバイトコードに対応する文字は3バイトの半角カナ文字である、
ことを特徴とする、付記15記載の情報処理装置。
(付記17)
記憶部に記憶された、所定の文字コード体系において2バイト以上のバイトコードに対応する文字と前記所定の文字コード体系における多バイト文字の上位から2バイト目以降のバイトコードに用いられる1バイトのコードとの対応関係を示す情報を参照し、
バイトコードを解釈する処理の際に、前記2バイト目以降のバイトコードに用いられる1バイトのコードが最上位バイトのバイトコードとして出現した場合には、前記対応関係を示す情報において、出現した前記2バイト目以降のバイトコードに用いられる1バイトのコードに対応する文字であると解釈する、
ことを特徴とする、文字コード処理方法。
(付記18)
バイトコードを変換する処理の際に、変換対象の2バイト以上のバイトコードが出現した場合には、出現した前記2バイト以上のバイトコードを、前記対応関係を示す情報において、対応する2バイト目以降のバイトコードに用いられる1バイトのコードに変換する、
ことを特徴とする、付記17記載の文字コード処理方法。
(付記19)
前記変換は、前記2バイト以上のバイトコードの最下位バイト以外のバイトコードを削除することを含むことを特徴とする、付記18記載の文字コード処理方法。
(付記20)
前記変換は、前記2バイト以上のバイトコードに所定の値を加算又は減算することを含むことを特徴とする、付記18又は付記19記載の文字コード処理方法。
1 システム
2、3、5 処理装置
21 プログラム
22 コンパイラ
23 定数取出部
24、37 圧縮処理部
25 オブジェクトファイル出力処理部
31 アプリケーション
32 外部入力要求部
33 データ操作部
34 外部出力要求部
35 ランタイムシステム
36 入力処理部
36a 画面入力部
36b 外部入力部
38 出力処理部
38a 画面出力部
38b 印刷出力部
38c 外部出力部
39 復元処理部
41 入力装置
42、45 記憶装置
43 表示装置
44 印刷装置

Claims (10)

  1. コンピュータに、
    記憶部に記憶された、所定の文字コード体系において2バイト以上のバイトコードに対応する文字と前記所定の文字コード体系における多バイト文字の上位から2バイト目以降のバイトコードに用いられる1バイトのコードとの対応関係を示す情報を参照し、
    バイトコードを解釈する処理の際に、前記2バイト目以降のバイトコードに用いられる1バイトのコードが最上位バイトのバイトコードとして出現した場合には、前記対応関係を示す情報において、出現した前記2バイト目以降のバイトコードに用いられる1バイトのコードに対応する文字であると解釈する、
    処理を実行させることを特徴とする、文字コード処理プログラム。
  2. コンピュータに、
    バイトコードを変換する処理の際に、変換対象の2バイト以上のバイトコードが出現した場合には、出現した前記2バイト以上のバイトコードを、前記対応関係を示す情報において、対応する2バイト目以降のバイトコードに用いられる1バイトのコードに変換する、
    処理を実行させることを特徴とする、請求項1記載の文字コード処理プログラム。
  3. 前記変換は、前記2バイト以上のバイトコードの最下位バイト以外のバイトコードを削除することを含むことを特徴とする、請求項2記載の文字コード処理プログラム。
  4. 前記変換は、前記2バイト以上のバイトコードに所定の値を加算又は減算することを含むことを特徴とする、請求項2又は請求項3記載の文字コード処理プログラム。
  5. 前記対応関係を示す情報において、複数の前記2バイト以上のバイトコードに対応する文字間のバイトコードの値の大小関係と、複数の前記2バイト目以降のバイトコードに用いられる1バイトのコード間の大小関係とが等しいことを特徴とする、請求項1〜4のいずれか1項記載の文字コード処理プログラム。
  6. 前記所定の文字コード体系において1バイトのバイトコードに対応する複数の文字の文字のコード域と、前記対応関係を示す情報における複数の前記2バイト目以降のバイトコードに用いられる1バイトのコード域とが連続した領域であることを特徴とする、請求項1〜5のいずれか1項記載の文字コード処理プログラム。
  7. 前記所定の文字コード体系は、1文字を可変バイトで表現し、前記2バイト目以降のバイトコードに用いられる1バイトのコードが他の文字のバイトコードの1バイト目に出現するバイトコードと重複しない文字コード体系であることを特徴とする、請求項1〜6のいずれか1項記載の文字コード処理プログラム。
  8. 前記所定の文字コード体系は、UTF−8(Unicode Transformation Format-8)であり、
    前記2バイト以上のバイトコードに対応する文字は3バイトの半角カナ文字である、
    ことを特徴とする、請求項7記載の文字コード処理プログラム。
  9. 所定の文字コード体系において2バイト以上のバイトコードに対応する文字と前記所定の文字コード体系における多バイト文字の上位から2バイト目以降のバイトコードに用いられる1バイトのコードとの対応関係を示す情報を記憶する記憶部と、
    バイトコードを解釈する処理の際に、前記2バイト目以降のバイトコードに用いられる1バイトのコードが最上位バイトのバイトコードとして出現した場合には、前記対応関係を示す情報において、出現した前記2バイト目以降のバイトコードに用いられる1バイトのコードに対応する文字であると解釈する解釈部と、
    をそなえることを特徴とする、情報処理装置。
  10. 記憶部に記憶された、所定の文字コード体系において2バイト以上のバイトコードに対応する文字と前記所定の文字コード体系における多バイト文字の上位から2バイト目以降のバイトコードに用いられる1バイトのコードとの対応関係を示す情報を参照し、
    バイトコードを解釈する処理の際に、前記2バイト目以降のバイトコードに用いられる1バイトのコードが最上位バイトのバイトコードとして出現した場合には、前記対応関係を示す情報において、出現した前記2バイト目以降のバイトコードに用いられる1バイトのコードに対応する文字であると解釈する、
    ことを特徴とする、文字コード処理方法。
JP2015214543A 2015-10-30 2015-10-30 文字コード処理プログラム、情報処理装置、及び文字コード処理方法 Expired - Fee Related JP6524887B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015214543A JP6524887B2 (ja) 2015-10-30 2015-10-30 文字コード処理プログラム、情報処理装置、及び文字コード処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015214543A JP6524887B2 (ja) 2015-10-30 2015-10-30 文字コード処理プログラム、情報処理装置、及び文字コード処理方法

Publications (2)

Publication Number Publication Date
JP2017084263A JP2017084263A (ja) 2017-05-18
JP6524887B2 true JP6524887B2 (ja) 2019-06-05

Family

ID=58714150

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015214543A Expired - Fee Related JP6524887B2 (ja) 2015-10-30 2015-10-30 文字コード処理プログラム、情報処理装置、及び文字コード処理方法

Country Status (1)

Country Link
JP (1) JP6524887B2 (ja)

Also Published As

Publication number Publication date
JP2017084263A (ja) 2017-05-18

Similar Documents

Publication Publication Date Title
EP1717719A1 (en) Application conversion of source data
CN106970820A (zh) 代码存储方法及代码存储装置
US7917860B2 (en) Simple styling
US20180324323A1 (en) Information processing apparatus, and storage medium
CN109948308A (zh) 代码安全保护方法、装置、电子设备和计算机可读存储介质
CN110569628B (zh) 一种代码的混淆方法以及装置、计算机设备、存储介质
AU2015211150B2 (en) Document page identifiers from selected page region content
JP2013058090A (ja) 情報処理装置、情報処理方法、及びプログラム
US20170300305A1 (en) Executable guidance experiences based on implicitly generated guidance models
CN100585561C (zh) 在嵌入式系统剪裁可重定位的elf文件的方法
CN113076167A (zh) 一种代码处理方法及相关设备
US20150113391A1 (en) Document processing system, document processing method and storage medium
US9292522B2 (en) Method and system for automating the editing of computer files
CN111695093A (zh) 基于iOS应用的加固方法、电子装置及存储介质
CN113986248A (zh) 一种代码生成方法、装置、计算机设备及存储介质
JP6524887B2 (ja) 文字コード処理プログラム、情報処理装置、及び文字コード処理方法
US9448975B2 (en) Character data processing method, information processing method, and information processing apparatus
CN111273913B (zh) 一种输出规范表示的应用程序接口数据的方法及装置
CN106663020B (zh) 迁移支持装置
JP5207886B2 (ja) 文書符号化装置、文書符号化方法
CN106471743B (zh) 普通ascii数据流的编码
JP7247593B2 (ja) 生成装置、ソフトウェアロボットシステム、生成方法及び生成プログラム
JPWO2005101210A1 (ja) データ解析装置およびデータ解析プログラム
JP7083473B2 (ja) 入力支援装置
JP5674974B2 (ja) 圧縮データ処理プログラム、圧縮データ編集プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180706

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190308

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190409

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190422

R150 Certificate of patent or registration of utility model

Ref document number: 6524887

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees