文字コード

サロゲート(ペア)について

投稿日:2018年2月23日 更新日:

サロゲート(ペア)について

文字コードに関する覚え書きと実験

Unicode のサロゲートペアとは何か

サロゲートペアは補助文字(補助(追加)多言語面に割り当てられた文字)を UTF-16 で表現したものであって,UTF-8 では使いません(禁止されています)。UTF-8 で扱うのは補助文字であって,サロゲート(ペア)ではありません。

補助文字をUTF-16で実現する方法がサロゲートペア。

 

Oracle Databaseのキャラクタ・セット「UTF8」

Oracle Databaseのデータベース・キャラクタ・セットで使用するUTF-8エンコーディングとしては、UTF8は候補とせず、最新のUnicodeに追随するAL32UTF8を使っておけば問題無し

 

CESU-8

本来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文字だけです。

 

 

 

 

スポンサーリンク

スポンサーリンク

-文字コード

執筆者:

関連記事

Unicodeについて

  Unicode ・ Unicode  【 ユニコード 】   ・JIS X0213:2004に含まれるUnicodeの補助文字を使用する場合の注意事項 (コードポイント) Unicode ...