サロゲート(ペア)について
サロゲートペアは補助文字(補助(追加)多言語面に割り当てられた文字)を UTF-16 で表現したものであって,UTF-8 では使いません(禁止されています)。UTF-8 で扱うのは補助文字であって,サロゲート(ペア)ではありません。
補助文字をUTF-16で実現する方法がサロゲートペア。
・Oracle Databaseのキャラクタ・セット「UTF8」
Oracle Databaseのデータベース・キャラクタ・セットで使用するUTF-8エンコーディングとしては、UTF8は候補とせず、最新のUnicodeに追随するAL32UTF8を使っておけば問題無し
本来UTF-8(RFC 2279 [外部リンク] )では、サロゲートペアは適時解釈してから符号化せねばならない。しかし、このCESU-8は、サロゲートの各ペアを機械的にUTF-8に変換するのみであり、supplementary characterは6バイトで表現される。これはUTF-8の仕様から外れた手法であるばかりか、公害ともなりうる実装である。しかしながら、Oracleはこのような実装をしてしまった。それを正当化するために、CESU-8としてエンコーディング登録をしてしまったのである。
従来のUnicodeでは未使用のだった0xD800~0xDBFF(1024通り)を「上位サロゲート」、0xDC00~0xDFFF(1024通り)を「下位サロゲート」と規定し、「上位サロゲート+下位サロゲート」の4バイトで文字を表現する方法です。「上位サロゲート」も「下位サロゲート」も従来のUnicodeでは未使用の領域なので、以前のUnicodeの文字コードと重複することはありません。このサロゲートペアの導入により1024×1024=1048576字の領域が追加されることになりました。
・Unicode, UTF についてひっかかったので色々メモ
Unicodeに含まれる文字は、「U+xxxx」という形式のコードポイントで管理されています。コードポイントの範囲はさらに2つに分類されています。1つは、U+0000~U+FFFFの範囲を指す基本多言語面(BMP:Basic Multilingual Plane)、もう1つは、U+10000~の範囲を指す補助(追加)多言語(SMP:Supplementary Multilingual Plane)です。JIS X 0208のすべての文字は基本多言語面に割り当てられていますが、JIS X 0213で追加された文字は、基本多言語面と補助(追加)多言語面のいずれかに割り当てられています。ここで、補助(追加)多言語面に割り当てられた文字を、補助文字(追加文字)と呼びます。
CP932(MS932)
・CP932
・本当は怖くないCP932
NET FrameworkのString型はUNICODE、実際にはUTF-16エンコードの文字列しか格納できません。それ以外のエンコード方式、文字コードへの(からの)変換は明示的にコードを書く必要があります。
CLRで文字、文字列として認識をして処理をされるのはUTF-16でエンコードされたUNICODE文字だけです。