Unicode 用バイナリ順序圧縮( BOCU ) は、MIME互換の Unicode 圧縮方式です。BOCU-1 は、UTF-8の幅広い適用性とUnicode 用標準圧縮方式(SCSU)のコンパクトさを兼ね備えています。このUnicode エンコードは、短い文字列の圧縮に便利で、コード ポイントの順序を維持できるように設計されています。BOCU-1 は、Unicode テクニカル ノートで指定されています。[1]
比較のために、SCSU は言語固有のコード ページと同様のバイト/コード ポイント比を持つ標準の Unicode 圧縮方式として採用されました。SCSU は MIME「テキスト」メディア タイプには適していないため、広く採用されていません。たとえば、SCSU は電子メールや同様のプロトコルで直接使用できません。SCSU では、良好なパフォーマンスを得るために複雑なエンコーダ設計が必要です。通常、zip、bzip2、およびその他の業界標準アルゴリズムを使用すると、大量の Unicode テキストをより効率的に圧縮できます。[2]
SCSU [3]とBOCU-1 [4]はどちらもIANAに登録された文字セットです。
詳細
このセクションのすべての数値は16 進数であり、すべての範囲は包括的です。
U+0000からまでのコード ポイントはU+0020、対応するバイト値として BOCU-1 でエンコードされます。その他のすべてのコード ポイント (つまり、U+0021からU+D7FFまでU+E000)はU+10FFFF、コード ポイントと、ASCII スペース ( ) ではない最新のエンコードされたコード ポイントの正規化バージョンとの差としてエンコードされますU+0020。初期状態は ですU+0040。正規化マッピングは次のとおりです。
現在のコード ポイントと正規化された前のコード ポイントの差は、次のようにエンコードされます。
各バイト範囲は、次の 13 個のバイト値を除いた辞書順に並べられ00 07 08 09 0A 0B 0C 0D 0E 0F 1A 1B 20ます: 。たとえば、FC 06 FFの差をコード化するバイト シーケンス の直後には、 の差をコード化する1156Bバイト シーケンス が続きます。
FC 10 011156C
スペースを除くU+0000へのASCII 入力は、エンコーダーを にリセットします。上記の値は行末コード ポイントをカバーし、( )のままであるため、エンコーダーは各行の先頭で既知の状態にあります。したがって、1 バイトの破損は最大で 1 行に影響します。比較すると、UTF-8での 1 バイトの破損は最大で 1 つのコード ポイントに影響しますが、SCSUの場合はドキュメント全体に影響する可能性があります。
U+007FU+0020U+0040U+000DU+000A 0D 0A
BOCU-1 は、特殊なリセット コードを使用して、上記の値を持たない入力テキストに対しても同様の堅牢性を提供します。デコーダーがこのオクテットを見つけると、行末として0xFF状態を にリセットします。リセット バイトの使用は、BOCU-1 の他の設計目標、特にバイナリ順序と競合するため、BOCU-1 仕様では推奨されていません。
U+00400xFF
U+FEFFBOCU-1 エンコードされたテキストの先頭、つまり BOCU-1 バイト シーケンス での署名のオプションの使用はFB EE 28、初期状態U+0040を に変更しますU+FEC0。言い換えると、他のほとんどの Unicode エンコード方式のように、署名を単純に削除することはできません。署名の後にリセット バイト ( FB EE 28 FF) を追加すると、この影響を回避できますが、BOCU-1 仕様ではこの方法は推奨されていません。
理論上、UTF-1とUTF-8 は、最大 31 ビットの元のUCS-4セットを までエンコードできます7FFFFFFF。BOCU-1 とUTF-16は、からまでの最新のUnicodeセットをエンコードできます。単一のオクテットとしてエンコードされる13 個の保護されたコード ポイントを除いて、BOCU-1 は、マルチバイト エンコードでオクテットを使用できます。BOCU-1 は、リード バイトと 1 ~ 3 個のトレイル バイトで構成される最大 4 バイトを必要とします。トレイル バイトは、残りの「モジュロ243」(基数 243) の差をエンコードし、リード バイトはトレイル バイトの数と最初の差を決定します。リセット バイトは保護されておらず、トレイル バイトとして発生する可能性がある
ことに注意してください。U+0000U+10FFFF0xFF
特許
2022年11月16日より前、一般的なBOCUアルゴリズムは米国特許#6,737,994で保護されており、これには特定のBOCU-1実装についても言及されています。[5]この特許は現在期限切れです。
BOCU-1の開発当時、その発明者2人を雇用していたIBMは、Unicodeテクニカルノートの中で、「BOCU-1の完全準拠バージョン」の実装者はIBMに連絡してロイヤリティフリーのライセンスを要求する必要があると述べている。 [6] BOCU-1は、Unicode Webサイトで説明されているUnicode圧縮方式の中で、知的財産権の制限を受けていることが知られている唯一のものである。
対照的に、IBMもUTF-EBCDICの特許を申請したが、その場合、実装者にライセンスを要求する代わりに、ドキュメントとエンコード方式を「UCS標準の一部として変換フォーマットを作成することに関心のあるすべての人に自由に利用可能にする」ことを選択した。[7]
参考文献
- ^ マーカス・シェラー、マーク・デイビス(2006-02-04)。 「UTN #6: BOCU-1」。2008 年 5 月 18 日に取得。
- ^ Ewell, Doug (2004-01-30). 「UTN #14: Unicode 圧縮の調査」(PDF) 。2008-06-13に閲覧。
- ^ SCSU の IANA 登録記録
- ^ BOCU-1 の IANA 登録記録
- ^ Davis ; et al. (2004-05-18). 「米国特許 #6,737,994、「Unicode のバイナリ順序圧縮」」。2022 年 12 月 28 日閲覧。
- ^ マーカス・シェラー、マーク・デイビス(2006-02-04)。 「UTN #6: BOCU-1」。2014 年 2 月 5 日に取得。
- ^ VS ウママヘスワラン (2002-04-16)。 「UTR #16: UTF-EBCDIC」。2008 年 11 月 16 日に取得。
参照
- UTF-1には、UTF-1、 UTF-8、BOCU-1の設計の比較が含まれています。
- Unicode 用国際コンポーネントBOCU-1 と他の Unicode エンコーディングを変換できるライブラリ
