ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
UnicodeやISO/IEC 10646の符号化方法(CES)の一つ。サロゲートペアという方法で、16ビットの範囲を超える文字を扱えるようにした。RFC 2781で情報提供扱いで規定されている。
Unicode 3.0以降で採用された符号化方法である。
Unicodeは元々は「16ビット固定長」の文字集合であり、ISO/IEC 10646用語では基本多言語面(BMP)と表現される集合である。従って扱える文字数は216で最大65,536文字に限られた。
そこでこのUnicodeの中で未定義だった領域に、サロゲートと呼ばれる1024個の領域を二つ(0xd800〜0xdb00と0xdc00〜0xdf00)用意し、これを組み合わせ1,024×1,024=1,048,576個の文字を扱えるようにした。
この文字数は、BMPの大きさである65,536(216)の16倍に相当する。
Unicodeには、U+0000からU+10FFFFまでのコードポイントが存在する。
元々16ビット固定長として作られたUnicodeであったが、16ビットを超える範囲を符号化するために、16ビットを二つ組み合わせて、16ビットを超える範囲の文字を表現することになった。この専用の記号文字をサロゲートといい、二つ組み合わせる手法をサロゲートペアという。
UTF-16では1バイトが16ビットになるが、これをバイトと呼ぶと混乱を招くため、UTF-16ではこれをコードユニットと呼ぶ。このように、16ビットのコードユニットを組み合わせてUnicodeを表現する符号化方法を、UTF-16という。
UTF-16は16ビット単位で文字が表現されるが、コンピューターではそれを8ビットごとに分解して処理することになるだろう。
エンディアンネス(ビッグエンディアンとリトルエンディアン)の違いがあり、どのようなオクテットシーケンスになるかは実装によるが、いずれにせよ現在のコンピューターは8ビット単位で情報を処理する。
文字コードの世界では、オクテット列で表わされる表現方法をCESという。一方でUnicodeの文字集合はCCSである。ここで問題となるのは中間の状態、UTF-16としての表現方法そのものであるが、このような16ビット形式での表現は新規に「CEF」という用語を作って呼ぶことにした。
つまり、Unicodeのコードポイント(CCS)→CEF(16ビット)→CES(8ビット)というように変形されていくことになる。
新たに出来た領域をISO/IEC 10646の1面〜16面として割り当て、ISO/IEC 10646の00群00面〜00群16面の計17面、最大1,114,112文字種まで利用可能となった。
この技術をサロゲートペアといい、このサロゲートペアを併用するUnicodeの符号化方法をUTF-16という。つまりUTF-16とは16ビットを基準とする可変長エンコードである。
ISO/IEC 10646の符号UCS-2との差は、このサロゲートペアの機能の有無である。
UTF-16では、0〜16面の計17面しか扱えない。しかし、このRFCを書いたFrancois Yergeauは、これで充分だと考えた。
その根拠は、ISO/IEC 10646の全領域を表現する方法は、実現はできても需要がないからである。UTF-16でさえ100万字の容量があるが、それを全て埋め尽くすほどコードポイントの需要があるとは考えにくい。
また、いずれUTF-16のエリアのコードポイントに文字がマッピングされるようになれば、徐々に可変長のUTF-16ライブラリより、固定長の符号UCS-4のライブラリが増えるに違いないと考えられた。
UTF-16の存在意義は、16ビット固定長という従来の枠を破ることのみにあったと言える。
Unicodeが普及した現在、この予測を改めて考えると、結果は外れたと言える。
文書ファイルなどでは、UCS-4やUTF-32ではなく可変長のUTF-8が普及することになった。そして、Microsoft WindowsのAPIや、JavaのString型などではUTF-16が使われているため、ある意味UTF-16はUTF-8より普及している。
更に、実質的にUnicodeに飲み込まれたISO/IEC 10646は、符号範囲はUnicodeの範囲(0〜16面)のみに限定されることが決まり、これはISO/IEC 10646:2011で実際に決定した。UCS-4はUTF-32の別名になり、UTF-32であっても16面までしか使われないことになる。
処理系の内部処理ではUTF-32(UCS-4)となっているものは少なくないと見込まれるが、文書ファイルとしては、予想の通りにUTF-16は廃れUTF-32(UCS-4)に置き換わることは、当分は無さそうである。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます