UTF-16

読み:ユーティーエフ・じゅうろく
外語:UTF-16: UCS Transformation Format-16 英語 , Unicode Transformation Format-16 英語
品詞:名詞

UnicodeISO/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という。

CESとCEF

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との差は、このサロゲートペアの機能の有無である。

BOM

符号化された文書がUTF-16であるかどうかを識別するためと、エンディアンネスを識別するために、文書の先頭にはBOMと呼ばれるバイト0xFEFFが付加される。

UnicodeでU+FEFFという文字は、ZERO WIDTH NO-BREAK SPACE(幅の無い改行しない空白)という記号である。見えないし改行もされない、存在自体を無視できる文字である。

リトルエンディアンの場合、先頭2オクテットが0xFF、0xFEとなり、ビッグエンディアンなら0xFE、0xFFとなる。

BOMの無い文書

BOMが定義される以前の文書には、BOMが無いものもある。

現在それはUTF-16LEUTF-16BEと呼ばれ、名称でエンディアンネスを識別するようになっている。

コンセプト

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 WindowsAPIや、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)に置き換わることは、当分は無さそうである。

用語の所属
UTF
16
関連する用語
ISO/IEC 10646
Unicode
UTF-16BE
UTF-16LE
UTF-8
UTF-32
サロゲートペア
CEF

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club