この実装では、1文字は64ビットで管理されています。
実際には、この1文字に対応するUnicode列を合わせて格納する構造体で管理していますが、直接的には、文字は64ビット管理であると言えます。
この64ビットは、32ビットのバンクと、32ビットの文字番号からなっています。
バンクは、TRONコードの仕様の拡張となっています。バンクで独自の文字集合を扱うことができるため、Unicodeに無い文字も、この処理系では難なく扱うことが可能となっています。
使用中のバンクの一例
- 0x00000000 … ZEROPAGE (文字コードをISO/IEC 10646として扱う)
- 0x0000XXXX … TRONコード用
- 0x1xxxxxXX … 各種標準用 (Unicodeに無い文字管理)
- 0xA0000100 … Unicode 1.0
- 0xExxxXXXX … 言語別文字集合
- 0xFxxxXXXX … 言語別文字集合
バンクも文字番号も余裕を充分に確保しており、高い拡張性を持っています。
現時点では、旧式であるUnicode 1.0文字集合や、Unicodeにはない放送業界用のモザイク文字集合、あるいは日本語のARIB STD-B24各種文字集合等の様々な文字を、情報を欠落させることなく管理することができています。
入力文書ファイルの自動認識機能が搭載されています。
ISO/IEC 2022のエスケープシーケンスや、UnicodeのBOMのような、自明に認識可能なもののほか、独自の自動認識機能を搭載しており、高精度に符号を認識します。
将来的には、優先する言語情報を設定できるようにする予定ですが、現在は主として日本語を認識します。
自動判別の言語は、-L:xx オプションで切り替えます。
- -L:JA 日本語モードにする
- -L:ZH 中文モードにする (現在未対応)
- -L:ZH-CN 中文 大陸簡体モードにする (現在未対応)
- -L:ZH-TW 中文 台湾正体モードにする (現在未対応)
詳細は、「高精度自動認識」を参照して下さい。
ユーザー定義外字に対応しています。
但し、符号によっては利用できないことがあります。
Unicode
- BMP領域 U+E000‐U+F8FF (6400字)
- 15面 U+F0000‐U+FFFFD (65534字)
- 16面 U+100000‐U+10FFFD (65534字)
ISO/IEC 10646
00群16面まではUnicodeと同じ
- 00群224面‐255面 0x00E00000‐0x00FFFFFF (2,097,152字)
- 96群‐127群 0x60000000‐0x7FFFFFFF (536,870,912字)
符号ごとに、一定の順序で、BMP、15面、16面、…の順で、順番に割り当ててい
きます。
SHIFT_JIS
シフトJISは、実装により大きく仕様に差があります。
- Windows-31J(Windowsで一般的なシフトJIS)
- 0xF040‐0xF9FC → Unicodeの U+E000‐U+E757
EUC-JP系符号
EUC-JP系符号は、実装により大きく仕様に差があります。
通常のEUC-JPは、外字に対応していません。対応する実装は、以下のように内部的に一旦Unicodeの外字領域にマッピングすることで、相互変換を実現してい
ます。このマッピングは当実装独自のものもあり、必ずしも他の実装と交換性があるとは限りません。
- eucJP-open(TOG日本ベンダ協議会(TOG/JVC)策定)
- 0xF5A1‐0xFEFE → Unicodeの U+E000‐U+E3AB (940字)
- 0x8F 0xF5A1‐0x8F 0xFEFE → Unicodeの U+E3AC‐U+E757 (940字)
- EUC-HJ (詳細は下記)
- 0xA121‐0xE528 → Unicodeの U+E000‐U+F8FF (6,400字)
- 0xE529‐0xFE7E → Unicodeの U+F0000‐U+F0983 (2,436字)
- DEC KANJI (DEC漢字、Super DEC漢字)
- 0xA121‐0xBF7E → Unicodeの U+E000‐U+EB61 (2,914字)
- DEC HANYU (台湾正体)
- 0xFDCC‐0xFEFE → Unicodeの U+E000‐U+E090 (145字)
- 0xF245‐0xFE7E → Unicodeの U+E091‐U+E532 (1,186字)
- DEC HANZI (大陸簡体)
- 0xA121‐0xE528 → Unicodeの U+E000‐U+F8FF (6,400字)
- 0xE529‐0xF77E → Unicodeの U+F0000‐U+F06F1 (1,778字)
- CP1383(IBM AIX、EUC-CNの拡張)
- 0xA2A1‐0xA2B0 → UNICODEの U+E000‐U+E00F
- 0xA2E3‐0xA2E4 → UNICODEの U+E010‐U+E011
- 0xA2EF‐0xA2F0 → UNICODEの U+E012‐U+E013
- 0xA2FD‐0xA2FE → UNICODEの U+E014‐U+E015
- 0xA4F4‐0xA4FE → UNICODEの U+E016‐U+E020
- 0xA5F7‐0xA5FE → UNICODEの U+E021‐U+E028
- 0xA6B9‐0xA6C0 → UNICODEの U+E029‐U+E030
- 0xA6D9‐0xA6FE → UNICODEの U+E031‐U+E056
- 0xA7C2‐0xA7D0 → UNICODEの U+E057‐U+E065
- 0xA7F2‐0xA7FE → UNICODEの U+E066‐U+E072
- 0xA8BB‐0xA8C4 → UNICODEの U+E073‐U+E07C
- 0xA8EA‐0xA9A3 → UNICODEの U+E07D‐U+E094
- 0xA9F0‐0xAFFE → UNICODEの U+E095‐U+E2D7
- 0xD7FA‐0xD7FE → UNICODEの U+E2D8‐U+E2DC
- 0xF8A1‐0xFEDF → UNICODEの U+E2DD‐U+E54F
EUCで外字を扱う場合、例えばEUC-JPの規格を維持した場合はJIS X 0208の空き領域などへマッピングするなど、空き領域を埋めるように実装するのが一般的です。
さもなくば、2バイト目を0x21から0x7eの範囲で拡張し、その範囲に外字領域をマッピングする実装が多くあります。但しこれをEUCと言えるのかどうかは定かではありません。
EUC-HJ
EUC-HJは、戸籍情報システムで用いられている符号です。
EUC-HJの外字領域を、単純にUnicodeの外字領域に対応させる変換のみを実装しています。
- 0xA121‐0xE528 → Unicodeの U+E000‐U+F8FF
- 0xE529‐0xFE7E → Unicodeの U+F0000‐U+F0983
文字を認識し、変換する機能は、専用の変換表を作る必要があります為、別途
見積もりで開発いたします。
ISO-2022-JP系符号
通常のISO-2022-JP系符号は、外字に対応していません。
次の専用の符号で、外字に対応します。
- CP50220
- CP50221
- CP50222
- ISO-2022-JP-MS
- CP50220/CP50221/CP50222
- 0x7F21‐0x927E → Unicodeの U+E000‐U+E757
- (ISO/IEC 2022の仕様から外れています)
- ISO-2022-JP-MS
- ESC 2/4 2/8 3/15の私的終端文字で、ユーザー定義外字の集合を指定します。
- 0x2121‐0x347e → Unicodeの U+E000‐U+E757
- (ISO/IEC 2022の仕様に合致しています)
その他符号
元がEUC-JP系でも、原形を留めない拡張をした符号は、その他として扱います。
- CP1381(IBM OS/2、EUC-CNの拡張)
- 0x8DA1‐0xA0FE → Unicodeの U+E000‐U+E757 (1880字)
- GBK/GB18030(EUC-CNの拡張)
- 0xAAA1‐0xAFFE → Unicodeの U+E000‐U+E233 (564字)
- 0xF8A1‐0xFEFE → Unicodeの U+E234‐U+E4C5 (658字)
- 0xA140‐0xA7A0 → Unicodeの U+E4C6‐U+E765 (672字)
様々ある点字の符号を変換できます。
対応符号
対応しない機能
点字との翻訳機能は、文字コード変換の範囲を超えると思われるため、搭載されません。
要望があれば、別製品として製造を賜わりますのでご相談下さい。
6点点字と8点点字
Unicodeでは、6点点字と8点点字が統合されています。Unicodeでは、6点点字は上側の6点を使うように包括されています。
このため、TRONコードのように6点点字と8点点字が別々に符号化されているものへ変換する場合、どちらの点字を使うかを選ぶ必要があります。
コマンドラインツールの場合、次のオプションを使用します。
- BRAILLE:AUTO または TENJI:AUTO … 特に何も優先をしない(標準)
- BRAILLE:8 または TENJI:8 … 8点点字を優先する
- BRAILLE:6 または TENJI:6 … 6点点字を優先する
オプション使用例
gtef infile outfile -o:tad -tenji:6
Unicode→TRONコードの場合、「6点点字を使用する」オプションを使用しない限りは、8点点字で文字が出力されます。
あくまで「優先」であり、出力先に8点または6点しか無い場合は、オプションに関わらず出力可能な方法で出力をします。