(Translated by https://www.hiragana.jp/)
UTF-16 - Wikipedia

UTF-16

UnicodeおよびISO/IEC 10646の符号ふごう形式けいしきおよび符号ふごう方式ほうしき

UTF-16 (UCS/Unicode Transformation Format 16[注釈ちゅうしゃく 1]) とは、UnicodeおよびISO/IEC 10646の、符号ふごうフォームおよび符号ふごうスキーム(文字もじ符号ふごう方式ほうしき参照さんしょう)のひとつである。

UTF-16では、1文字もじが、16ビット符号ふごう単位たんいが1つまたは2つで符号ふごうされる。これが「-16」の由来ゆらいである。基本きほん多言たげんめん(BMP)うち文字もじは、符号ふごう単位たんい1つの16ビットであらわされる。BMP以外いがい文字もじは、符号ふごう単位たんい2つの32ビットであらわされる。なお、UTF-16は2バイトコードだと誤解ごかいされることがあるが、このように4バイトのこともあるため間違まちがいである。

Unicodeにおいては、厳密げんみつには、文字もじ符号ふごうフォーム(えい: Character Encoding Form)の1つの名称めいしょうであり、かつ、UTF-16符号ふごう形式けいしきのための文字もじ符号ふごうスキーム(えい: Character Encoding Scheme)の1つの名称めいしょうでもある。UTF-16符号ふごうフォームのための文字もじ符号ふごうスキームには、UTF-16のほかUTF-16BEUTF-16LEがある。

符号ふごう

編集へんしゅう

UTF-16では、Unicodeの代用だいよう符号ふごう位置いちのぞいた符号ふごう位置いち(Unicodeスカラという)を、16ビット符号ふごうなし整数せいすう符号ふごう単位たんいとした符号ふごう単位たんいれつあらわす。符号ふごう単位たんいれつは1つまたは2つの符号ふごう単位たんいからなる。すなわち、合計ごうけいは16ビットまたは32ビットである。

BMPにふくまれるU+0000U+D7FFU+E000U+FFFFは、そのまま符号ふごう単位たんい1つであらわす。BMP以外いがいU+10000U+10FFFFは、ひょうのようにビットを配分はいぶんして、符号ふごう単位たんい2つであらわす。

スカラ UTF-16 備考びこう
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx
000uuuuuyyyyyyxxxxxxxxxx 110110wwwwyyyyyy 110111xxxxxxxxxx wwww = uuuuu - 1

このとき使つかわれる、U+D800U+DFFF符号ふごう位置いちを、代用だいよう符号ふごう位置いち(Surrogate Code Point)とび、BMPがいの1つの符号ふごう位置いちあらわ連続れんぞくした2つの代用だいよう符号ふごう位置いちのペアをサロゲートペアぶ。代用だいよう符号ふごう位置いち使つかうため、BMPのこの領域りょういきには文字もじ収録しゅうろくされておらず、UTF-16以外いがいUTF-8UTF-32では使用しようされない。

Unicodeの符号ふごう位置いち最大さいだいがU+10FFFFなのは、それがUTF-16であらわせる最大さいだいだからである。

UTF-16符号ふごうフォームで表現ひょうげんされた文字もじは、16ビット符号ふごうなし整数せいすう符号ふごう単位たんいれつであり、プログラム内部ないぶでの処理しょりには都合つごうがよいが、それでもって情報じょうほう交換こうかんのためにファイルのきや通信つうしんおこな場合ばあいは、適当てきとう符号ふごうスキームにより、バイト直列ちょくれつする必要ひつようがある。

符号ふごうスキームには、UTF-16、UTF-16BE、UTF-16LEの3種類しゅるいある。UTF-16BEは、16ビット整数せいすうビッグエンディアン直列ちょくれつする。UTF-16LEは、リトルエンディアン直列ちょくれつする。UTF-16BE、UTF-16LEの場合ばあいは、バイトじゅんマーク (BOM)付与ふよゆるされない。UTF-16の場合ばあいは、BOM でエンディアンを明示めいじするか、上層じょうそうのプロトコルで指定していされておらずBOMも付与ふよしない場合ばあいはビッグエンディアンにするようめられている[1]

UTF-8UTF-32比較ひかくして、一般いっぱんてき日本語にほんご主体しゅたい文章ぶんしょうではUnicode符号ふごう方式ほうしきなかでは最小さいしょうサイズとなる。追加ついかめん文字もじふくまれる場合ばあい、バイトじゅんにソートしても符号ふごう位置いちじゅんとはならない。また、UTF-8とちがASCII互換ごかんではない。

Shift_JIS比較ひかくして、Shift_JISでは1バイト文字もじと、2バイト文字もじの1バイトと2バイト範囲はんい一部いちぶ重複じゅうふくしているが、UTF-16では1符号ふごう単位たんい文字もじ、サロゲートペアの前半ぜんはん符号ふごう単位たんい後半こうはん符号ふごう単位たんいがすべてことなる範囲はんいる。そのため、Shift_JISであった、たとえば「a」で検索けんさくすると2バイトにマッチする場合ばあいがある、途中とちゅうからみこむと文字もじ区切くぎりがわからないときがある、1バイトや2バイト欠落けつらくした場合ばあい後続こうぞく文字もじすべてが文字もじけする可能かのうせいがある、などの問題もんだい発生はっせいしない。UTF-16では欠落けつらくがあっても影響えいきょうけるのはその文字もじだけである[2]

UTF-16符号ふごうフォームは、WindowsJavaJ2SE 5.0以上いじょう)で、内部ないぶ表現ひょうげん使つかわれている。Windowsの内部ないぶ表現ひょうげんでは、16ビット符号ふごうなし整数せいすう符号ふごう単位たんいとするUTF-16符号ふごうフォームとしてあつかい、ファイルなどでは、BOMあり(リトルエンディアン)のUTF-16符号ふごうスキームおもである。

TCP/IPネットワークでは、プロトコルヘッダやMIMEとう手段しゅだん文字もじ符号ふごうスキームを指定していしない場合ばあいは、ビッグエンディアンにめられている。

脚注きゃくちゅう

編集へんしゅう

注釈ちゅうしゃく

編集へんしゅう
  1. ^ UTFは、UnicodeではUnicode Transformation FormatのりゃくISO/IEC 10646ではUCS Transformation Formatのりゃくとされる。

出典しゅってん

編集へんしゅう
  1. ^ The Unicode Standard Version 12.0” (PDF) (English). The Unicode Consortium. p. 131 (2019ねん3がつ). 2019ねん5がつ12にち閲覧えつらん。 “The UTF-16 encoding scheme may or may not begin with a BOM. However,when there is no BOM, and in the absence of a higher-level protocol, the byteorder of the UTF-16 encoding scheme is big-endian.”
  2. ^ FAQ - UTF-8, UTF-16, UTF-32 & BOM” (English). The Unicode Consortium (2017ねん6がつ27にち). 2019ねん5がつ12にち閲覧えつらん

参考さんこう資料しりょう

編集へんしゅう

用語ようご日本語にほんご表記ひょうきつぎ参考さんこうにした。Unicode Terminology English - Japanese”. Unicode, Inc. 2010ねん1がつ1にち閲覧えつらん

関連かんれん項目こうもく

編集へんしゅう