CESU-8

UTF-16互換エンコード方式: 8 ビット( CESU-8 ) は、 Unicode技術レポート #26で説明されているUTF-8の変種です。 [ 1 ]基本多言語面(BMP) の Unicode コード ポイント、つまりU+0000からU+FFFF の範囲のコード ポイントは、UTF-8 と同じ方法でエンコードされます。Unicode 補助文字、つまりU+10000からU+10FFFFの範囲のコード ポイントは、まずUTF-16の場合と同様にサロゲート ペアとして表現され、次に各サロゲート コード ポイントが UTF-8 でエンコードされます。そのため、CESU-8 では各 Unicode 補助文字に 6 バイト (サロゲート 1 文字あたり 3 バイト) が必要ですが、UTF-8 では 4 バイトしか必要ありません。技術レポートでは指定されていませんが、ペアになっていないサロゲートもそれぞれ 3 バイトとしてエンコードされ、CESU-8 は、古いUCS-2から UTF-8 へのコンバータを UTF-16 データに適用するのとまったく同じです。

Unicode非BMP文字のエンコーディングは11101101 1010yyyy 10xxxxxx 11101101 1011xxxx 10xxxxxx(yyyyは文字の上位5ビットから1を引いた値を表します)となります。バイト値0xF0〜0xF4は、UTF-8で使用される4バイトエンコーディングの開始値であるため、CESU-8には表示されません。

CESU-8はUnicode標準の公式な一部ではありません。これは、Unicode技術報告書が参考文書に過ぎないためです。[ 2 ] CESU-8は内部処理のみに使用し、外部とのデータ交換には使用しないでください。HTMLでCESU-8をサポートすることは、W3C [ 3 ]およびWHATWG [ 4 ]によって禁止されています。

Javaの修正UTF-8は、 2バイトシーケンスとしてNUL U+0000の特別な長すぎるエンコードを備えたCESU-8です。[ 5 ] Oracleデータベースは、文字セットとしてCESU-8を使用していますが、標準UTF-8と呼ばれています(Oracleバージョン9.0以降)。[ 6 ]C0 80UTF8AL32UTF8

コードポイント U+0045 ⟨E⟩U+0205 ⟨ȅ⟩U+10400 ⟨𐐀⟩
UTF-8 45 C885F0909080
UTF-16 00450205D801DC00
CESU-8 45 C885EDA081EDB080

参考文献