Lotus Multi-Byte Character Set ( LMBCS ) は、Lotus Development CorporationがBob Balaban らの意見を取り入れて1988 年に考案した独自のマルチバイト文字エンコーディングです。 [ 1 ]ほぼ同時期に作成され、同様の問題に対処した LMBCS は、 Unicodeと並行して開発され、代替案となる可能性があったと考えられます。[ 1 ]最大限の互換性を確保するため、LMBCS の後のバージョンではUTF-16 がサブセットとして組み込まれています。 [ 2 ] [ 3 ]
商用としては、LMBCS は1989 年 3 月にDOS版Lotus 1-2-3 Release 3 [ 1 ] [ 4 ]および1990 年にOS/2版Lotus 1-2-3/G Release 1 [ 1 ]のデフォルト文字セットとして初めて導入され、以前の DOS 専用バージョンの Lotus 1-2-3 およびSymphonyで使用されていた8 ビットLotus International Character Set (LICS) およびASCIIに取って代わりました。[ 5 ] LMBCS はIBM / Lotus SmartSuite、Notes 、およびDomino [ 1 ]だけでなく、多数のサードパーティ製品でも使用されています。
LMBCSは、ラテン文字[ 6 ] 、アラビア文字、ヘブライ文字、ギリシャ文字、キリル文字[ 6 ] 、タイ文字、中国語、日本語[ 6 ]、韓国語の文字体系、および技術記号を使用する言語に必要な文字をエンコードします。
技術的には、LMBCS は先頭バイト符号化であり、コードポイント 00 ( 16進数)とコードポイント 20 (32)から7F (127)はASCII [ 1 ](および LICS)と同一です。 [ 5 ]
Code point 00hex is always treated as NUL character to ensure maximum code compatibility with existing software libraries dealing with null-terminated strings[1] in many programming languages such as C.[a] This applies even to the UTF-16be codes, where code words with the form xx00hex are mapped to private-use codes with the form F6xxhex during encoding in order to avoid the use of NUL bytes,[7] and to escaped control characters, where 20hex is added to the C0 (but not C1) control characters following the 0Fhex lead byte.[7]
Code points 01hex to 1Fhex, which serve as control codes in ASCII, are used as lead bytes to switch the definition of code points above 7Fhex between several code groups (similar to code pages) and at the same time determine either a single- or multi-byte nature for the corresponding code group.[1]
For example, code group 1 (with group byte 01hex)[1] is almost identical to the SBCScode page 850, whereas code group 16 (with group byte 10hex)[1] is similar to the Japanese MBCScode page 932. Multi-byte characters can thus occupy two or three bytes.[7][6]
標準 LMBCSでは、各文字はグループ バイトで始まります。[ 1 ] 長さを短縮するために、最適化または圧縮された LMBCSでは、アプリケーションまたはプロセスごとにデフォルトのコード グループまたは最適化グループ コードが定義され (理想的には、発生確率が最も高いものを選択) [ 1 ]、何らかの方法で解釈コードに伝達する必要があります (例えば、対応する「LMBCS- n」名を指定することによって)。[ 8 ]これにより、これらの文字のグループ バイトを省略できます。[ 1 ] Lotus 1-2-3 は、対応するソース ファイルのファイル ヘッダーから最適化グループ コードを取得しますが、[ 7 ] Lotus Notes では、最適化グループ コードは常に 01 hexに固定されています。[ 2 ] [ 7 ]
Without prefix byte the code points 32 (20hex) to 127 (7Fhex) are interpreted as follows (corresponding to LMBCS codes 32 to 127):
LMBCSグループ1のコードポイント128(80 hex)から255(FF hex)は、コードページ850(DOS Latin-1)の対応するコードポイントと同一ですが、コードポイント1(01 hex)から127(7F hex)は、次の例外リスト(LMBCSコード256から383に対応)に従って定義されます。
LMBCSグループ2のコードポイント128(80 hex)から255(FF hex)は、コードページ851(DOS Greek)の対応するコードポイントと同一ですが、コードポイント1(01 hex)から127(7F hex)は、次の例外リストに従って定義されます。[ f ]
LMBCSグループ6のコードポイント128(80 hex)から255(FF hex)は、コードページ852(DOS Latin-2)の対応するコードポイントと同一ですが、コードポイント1(01 hex)から127(7F hex)は、次の例外リストに従って定義されます。[ f ]
X'20' から X'FF' までの 1 バイト値の
注記
ではグループ バイトが省略されています。
例えば、LMBCSは常に0x01をグループとして最適化されるため、最初のバイトが0x1Fより大きい文字は、暗黙的に0x01のグループバイトを持つことになります。
[…] Notesは、プログラムが内部的に使用するすべてのテキストデータをエンコードするために、Lotus Multibyte Character Set(LMBCS)という単一の文字セットを使用します。NotesがLMBCS以外の文字セットでエンコードされたテキストを最初に入力すると、そのテキストをLMBCS文字列に変換します。また、LMBCS以外の文字セットでテキストを出力する必要がある場合は、内部のLMBCS文字列を適切な文字セットに変換します。すべてのテキストは内部的にLMBCSでフォーマットされるため、すべてのテキスト処理操作は[…] 1つの方法でのみ実行されます。LMBCSは、1つのテキスト文字を表すためにメモリ内で最大3バイトを使用します[…]