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 バイト (サロゲートあたり 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] [4]およびWHATWG [5] HTML標準によって禁止されています。[6]
Javaの修正UTF-8は、 NUL文字(U+0000)を2バイトシーケンスとして特別に長めにエンコードしたCESU-8ですC0 80。[7]
Oracleデータベースは「UTF8」文字セットとしてCESU-8を使用します。標準UTF-8は文字セット「 AL32UTF8 」(Oracleバージョン9.0以降)を使用して取得できます。[8]
例
参考文献
- ^ McGowan, Rick. 「Unicode 技術レポート #26 - UTF-16 の互換性エンコーディング スキーム: 8 ビット (CESU-8)」。Unicode コンソーシアム。
- ^ 「Unicode 技術レポートについて - Unicode 技術レポートの種類: UAX、UTS、UTR」。Unicode コンソーシアム。
- ^ 「8.2.2.3. 文字エンコーディング」。HTML 5.1 標準。W3C。
- ^ 「8.2.2.3. 文字エンコーディング」。HTML 5 標準。W3C。
- ^ 「12.2.3.3 文字エンコーディング」。HTML Living Standard。WHATWG。
- ^ 「<meta> - HTML」。MDN Web Docs。Mozilla。
- ^ 「Java SE ドキュメントのインタフェース java.io.DataInput、Modified UTF-8 に関するサブセクション」。Oracle Corporation 2015 年。2021 年 4 月 30 日閲覧。
- ^ 「表 A-10 ユニバーサル文字セット」。
外部リンク
- ユニコード技術レポート #26
- 修正されたUTF-8定義
- ICU のコンバータ エクスプローラーにおける CESU-8 のグラフィカル ビュー
