ユニコード
[Wikipedia|▼Menu]
□記事を途中から表示しています
[最初から表示]

サロゲートペアはUTF-16でのみ使われ[11]、UTF-8、UTF-32ではすべての符号位置を符号化できるためこのような特別な処理は必要ない。
コーディング

サロゲートのエンコーディングは、符号位置を C P {\displaystyle CP} 、ハイサロゲートを H S G {\displaystyle HSG} 、ローサロゲートを L S G {\displaystyle LSG} とすると次の通りに計算する。 H S G = f l o o r ( C P − 10000 16 400 16 ) + D 800 16 {\displaystyle HSG=\mathrm {floor} \left({\frac {CP-10000_{16}}{400_{16}}}\right)+{\rm {D800}}_{16}} L S G = ( C P − 10000 16 ) mod 4 00 16 + D C 00 16 {\displaystyle LSG=\left(CP-10000_{16}\right){\bmod {4}}00_{16}+{\rm {DC00}}_{16}}

デコーディングは、 C P = 10000 16 + ( H S G − D 800 16 ) × 400 16 + ( L S G − D C 00 16 ) {\displaystyle CP=10000_{16}+\left(HSG-{\rm {D800}}_{16}\right)\times 400_{16}+\left(LSG-{\rm {DC00}}_{16}\right)}

である。
コード変換例
「?
[注釈 4]」U+20BB7 のエンコードを考えてみる。 0010   0000   10 11   1011   0111 2   ( 20 B B 7 16 ) {\displaystyle {\color {green}0010\ 0000\ 10}{\color {blue}11\ 1011\ 0111}_{2}\ ({\rm {20BB7}}_{16})} から 0001   0000   0000   0000   0000 2   ( 10000 16 ) {\displaystyle 0001\ 0000\ 0000\ 0000\ 0000_{2}\ (10000_{16})} を引くと、結果は 0001   0000   10 11   1011   0111 2   ( 10 B B 7 16 ) {\displaystyle {\color {green}0001\ 0000\ 10}{\color {blue}11\ 1011\ 0111}_{2}\ ({\rm {10BB7}}_{16})} となる。これを上位10ビット値と下位10ビット値に分割する。 0001   0000   10 2   ( 0042 16 ) ,     11   1011   0111 2   ( 03 B 7 16 ) {\displaystyle {\color {green}0001\ 0000\ 10}_{2}\ ({\color {green}0042}_{16}),\ \ {\color {blue}11\ 1011\ 0111}_{2}\ ({\rm {\color {blue}03B7}}_{16})} ハイ(上位)サロゲートを形成するために上位ビットに D 800 16 {\displaystyle {\rm {D800}}_{16}} を加える。 00   0100   0010 2   ( 0042 16 ) + 1101   1000   0000   0000 2   ( D 800 16 ) = 1101   10 00   0100   0010 2 ( D 842 16 ) {\displaystyle {\color {green}00\ 0100\ 0010}_{2}\ ({\color {green}0042}_{16})+1101\ 1000\ 0000\ 0000_{2}\ ({\rm {D800}}_{16})=1101\ 10{\color {green}00\ 0100\ 0010}_{2}({\rm {D842}}_{16})} ロー(下位)サロゲートを形成するために下位ビットに D C 00 16 {\displaystyle {\rm {DC00}}_{16}} を加える。 11   1011   0111 2   ( 03 B 7 16 ) + 1101   1100   0000   0000 2   ( D C 00 16 ) = 1101   11 11   1011   0111 2 ( D F B 7 16 ) {\displaystyle {\color {blue}11\ 1011\ 0111}_{2}\ ({\rm {\color {blue}03B7}}_{16})+1101\ 1100\ 0000\ 0000_{2}\ ({\rm {DC00}}_{16})=1101\ 11{\color {blue}11\ 1011\ 0111}_{2}({\rm {DFB7}}_{16})} 結果 D 842 16 ,   D F B 7 16 {\displaystyle {\rm {\color {green}D842}}_{16},\ {\rm {\color {blue}DFB7}}_{16}} (UTF-16 符号単位列) D 8 16 ,   42 16 ,   D F 16 ,   B 7 16 {\displaystyle {\rm {\color {green}D8}}_{16},\ {\rm {\color {green}42}}_{16},\ {\rm {\color {blue}DF}}_{16},\ {\rm {\color {blue}B7}}_{16}} (UTF-16BEでの符号化バイト列) 42 16 ,   D 8 16 ,   B 7 16 ,   D F 16 {\displaystyle {\rm {\color {green}42}}_{16},\ {\rm {\color {green}D8}}_{16},\ {\rm {\color {blue}B7}}_{16},\ {\rm {\color {blue}DF}}_{16}} (UTF-16LEでの符号化バイト列)

次の表は、この文字変換と他をまとめたものである。 色は、コードポイントからのビットがUTF-16バイトにどのように分配されるかを示した。 なお、UTF-16エンコーディングプロセスによって追加された追加ビットは黒で示されている。

文字
(符号位置)符号位置(2進数)UTF-16
符号単位列(2進数)UTF-16
符号単位列UTF-16BE
符号化バイト列UTF-16LE
符号化バイト列
$U+00240000 0000 0010 01000000 0000 0010 0100002400 2424 00
?[注釈 5]U+20AC0010 0000 1010 11000010 0000 1010 110020AC20 ACAC 20
?[注釈 4]U+20BB70010 0000 1011 1011 01111101 1000 0100 0010 1101 1111 1011 0111D842 DFB7D8 42 DF B742 D8 B7 DF
最大値U+10FFFF1 0000 1111 1111 1111 11111101 1011 1111 1111 1101 1111 1111 1111DBFF DFFFDB FF DF FFFF DB FF DF

一つの面は6万5536個の符号位置がある。

面符号位置英語での名称略称日本語での名称収録されている主な文字
第0面U+0000 - U+FFFFBasic Multilingual PlaneBMP
基本多言語面基本的な文字。
第1面U+10000 - U+1FFFFSupplementary Multilingual PlaneSMP追加多言語面古代文字や記号・絵文字類など。
第2面U+20000 - U+2FFFFSupplementary Ideographic PlaneSIP追加漢字面漢字専用領域。
第3面U+30000 - U+3FFFFTertiary Ideographic PlaneTIP第三漢字面追加漢字面に入りきらなかった漢字。また、将来的には古代漢字や甲骨文字などが収録される予定[注釈 6]
第4面U+40000 - U+4FFFF未使用(将来どのような目的で使用するのかすら決まっていない)。
第5面U+50000 - U+5FFFF
第6面U+60000 - U+6FFFF
第7面U+70000 - U+7FFFF
第8面U+80000 - U+8FFFF
第9面U+90000 - U+9FFFF
第10面U+A0000 - U+AFFFF
第11面U+B0000 - U+BFFFF
第12面U+C0000 - U+CFFFF
第13面U+D0000 - U+DFFFF
第14面U+E0000 - U+EFFFFSupplementary Special-purpose PlaneSSP追加特殊用途面制御コード専用領域。
第15面U+F0000 - U+FFFFFPrivate Use PlanePUP私用面BMPの U+E000 - U+F8FF の領域の拡張。
第16面U+100000 - U+10FFFF

日本では2000年にJIS X 0208を拡張する目的でJIS X 0213(いわゆるJIS第3・第4水準)が制定されたが、この際、新たに採用された文字でUnicodeになかったものの一部は、BMPに収録できず、第2面への収録となった(Unicodeが最終的にJIS X 0213への対応を完了したのは2002年である)。このため、JIS X 0213収録文字をUnicodeで完全にサポートするには、追加漢字面をサポートしたOSフォントアプリケーションが必要となる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:305 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef