LMBCS
NotesがLMBCS (Lotus Multi-Byte Character Set)を使っている、と言うことをご存知な方は多いと思いますが、なかなか詳細には公開されていない部分もあるのでブラックボックスに見える方は多いのではないかと思います。
このブログでその全容を書くことまでは出来ないのですが、簡単にLMBCSの概要を説明することが出来たらな、と思います。
■ LMBCSとは?
LMBCSはおよそ20年ほど前にLotus 1-2-3ファイルとNotesデータベースで複数言語を扱うためのキャラクターセットとして使用するために考えられました。
一般的に、LMBCSは1-3バイトからなる文字列です。
[グループバイト G] データバイト D1 [データバイト D2]
つまり、少なくとも1バイトのデータバイト(D1)は含みますが、グループバイトやデータバイト D2 は含まない場合もあります。
■ 1バイト文字
0x20-0x7FのASCII文字の領域は、LMBCS でも1バイト文字として扱います。
この意味で、LMBCSはASCII文字のスーパーセットであるといえます。
0x01-0x1F はグループバイトを表す文字として使用されます。
ただし、以下の文字は例外です。
0x09 : 水平タブ
0x0A : Line Feed
0x0D : Carriage Return
0x19 : (1-2-3用)
0x80 以上の文字を1バイト文字として解釈する必要があるときは Codepage 850(Extended Ascii)として解釈します。
■ グループコード
1バイト目が、グループコードの範囲であったとき、(上で定義した特殊文字を除く0x01-0x1Fの範囲の文字)その文字はマルチバイト文字と判断されます。 このとき1バイト目(グループコード)国をあらわします。国を表す、と言うと分かりにくいのですがNative Charactersetのような意味だと思ってください。日本語ならShift-JISになります。
以下が代表的な例です。
0x08 トルコ語
0x0B タイ語
0x10 日本語
0x11 韓国語
0x12 中国語(繁体字)
0x13 中国語(簡体字)
Notes.iniファイルなどに日本語が入っているときに0x10 と言う文字が入っているのを見た事がある方は多いと思います。(ノートパッドでは黒い四角のように見えていると思います)これはLMBCSのグループコードが入っているわけです。そのあとの字が正しく表示されているのは日本語の場合Shift-JISだからなのです。
■ 1バイトしか使用しないダブルバイト文字の場合
たとえば日本語の場合、半角カナのように1バイトしか使用しないケースがあります。
このような場合は、グループコードを繰り返すことによって表記します。
たとえば、 半角かなの ァ(0xA7)と言う文字を表すのであれば
0x10 0x10 0xA7
のようにグループコードを繰り返して表記します。
あんまり詳細まで入れませんが、LMBCSと言っても日本語を扱う限りにおいては、Shift-JISに0x10とか余計なバイトが紛れ込むだけでそれほど訳の分からない文字でもないことが分かってもらえるのではないかと思います。
このブログでその全容を書くことまでは出来ないのですが、簡単にLMBCSの概要を説明することが出来たらな、と思います。
■ LMBCSとは?
LMBCSはおよそ20年ほど前にLotus 1-2-3ファイルとNotesデータベースで複数言語を扱うためのキャラクターセットとして使用するために考えられました。
一般的に、LMBCSは1-3バイトからなる文字列です。
[グループバイト G] データバイト D1 [データバイト D2]
つまり、少なくとも1バイトのデータバイト(D1)は含みますが、グループバイトやデータバイト D2 は含まない場合もあります。
■ 1バイト文字
0x20-0x7FのASCII文字の領域は、LMBCS でも1バイト文字として扱います。
この意味で、LMBCSはASCII文字のスーパーセットであるといえます。
0x01-0x1F はグループバイトを表す文字として使用されます。
ただし、以下の文字は例外です。
0x09 : 水平タブ
0x0A : Line Feed
0x0D : Carriage Return
0x19 : (1-2-3用)
0x80 以上の文字を1バイト文字として解釈する必要があるときは Codepage 850(Extended Ascii)として解釈します。
■ グループコード
1バイト目が、グループコードの範囲であったとき、(上で定義した特殊文字を除く0x01-0x1Fの範囲の文字)その文字はマルチバイト文字と判断されます。 このとき1バイト目(グループコード)国をあらわします。国を表す、と言うと分かりにくいのですがNative Charactersetのような意味だと思ってください。日本語ならShift-JISになります。
以下が代表的な例です。
0x08 トルコ語
0x0B タイ語
0x10 日本語
0x11 韓国語
0x12 中国語(繁体字)
0x13 中国語(簡体字)
Notes.iniファイルなどに日本語が入っているときに0x10 と言う文字が入っているのを見た事がある方は多いと思います。(ノートパッドでは黒い四角のように見えていると思います)これはLMBCSのグループコードが入っているわけです。そのあとの字が正しく表示されているのは日本語の場合Shift-JISだからなのです。
■ 1バイトしか使用しないダブルバイト文字の場合
たとえば日本語の場合、半角カナのように1バイトしか使用しないケースがあります。
このような場合は、グループコードを繰り返すことによって表記します。
たとえば、 半角かなの ァ(0xA7)と言う文字を表すのであれば
0x10 0x10 0xA7
のようにグループコードを繰り返して表記します。
あんまり詳細まで入れませんが、LMBCSと言っても日本語を扱う限りにおいては、Shift-JISに0x10とか余計なバイトが紛れ込むだけでそれほど訳の分からない文字でもないことが分かってもらえるのではないかと思います。
コメント