UCS と UTF

(1/1)
ホッケ
文字符号化方式として、Unicode では UTF-8, UTF-16, UTF-32 が、ISO/IEC 10646 では UCS-2, UCS-4 が用いられる。このうち UTF-8ASCIIコード とも共存でき、Webでテキストを交換するときによく使われる。

UCS-2とUCS-4

Unicode=古今東西のあらゆる文字を収録」で述べたように、[ISO/IEC 10646-1: 1993 Universal Multiple-Octet Coded Character Set (UCS)」で規定された16ビット長(2オクテット)の文字符号化方式を UCS-2 と呼ぶ。
UCS-2は、U+0000からU+FFFFの範囲を扱うことができ、たとえば「山」は [U+5C71]:blue と表記する。

さらに多くの文字を含められるよう32ビット長(4オクテット)に拡張した文字符号化方式が UCS-4 である。UCS-2のU+00000000からU+0000FFFFに加え、U+00010000からU+7FFFFFFFの約21億文字分の領域が確保されている。
たとえば 𩸽 (ほっけ)  は、サロゲートペアで 0xD867+0xDE3Dの32ビットでコードされる。
サロゲートペアをUCS-4に変換する式を示す。
C = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000
  C:コードポイント(UCS-4)
  H:上位サロゲート
  L:下位サロゲート
ここでは、H = 0xD867, L = 0xDE3D を代入し、
(0xD867 - 0xD800) * 0x400 + (L - 0xDE3D) + 0x10000 = 0x29E3D
となり、UCS-4では U+29E3D と表記する。

UTF-16 と UTF-32

ISO/IEC 10646 で "UCS Transformation Format" として制定されたのが Unicode の文字符号化方式である。UTF-8, UTF-16, UTF-32 などがある。

UTF-16 は、「JIS X 0213 とサロゲートペア」で紹介したUnicodeの文字符号化方式そのものである。BMPの範囲であるU+0000~U+D7FFおよびU+E000~U+FFFFは2バイトで表し、サロゲートペアの領域は4バイトで表す。

UTF-16 は、Javaのchar型や、Windows XPのワイド文字といった内部処理に用いられることが多くエンディアン に注意しなければいけない。
まず、ビッグエンディアン(バイト列の正順)は UTF-16BE、リトルエンディアン(バイト列の逆順)は UTF-16LE と呼んで区別している。
通常、UTF-16 と呼ぶものはビッグエンディアンだ。ただし、テキストの冒頭に BOM(U+FEFF)という特殊文字が置かれている場合、BOMが0xFE 0xFF の順に表れたらビッグエンディアン、0xFF 0xFE の順 ならリトルエンディアンとなる。BOM無しのリトルエンディアンは存在しない。

UTF-32UCS-4 と同じだ。
当初は、Unicode で必要とする U+0000からU+10FFFFの範囲に限られ、UCS-4 のサブセットの扱いだったが、将来の拡張領域として UCS-4 と同じ領域を表現できるようになった。
コンピュータ保管用のデータとして利用される機会は少ない

HTMLの数値文字参照

HTMLでは、"&#x" につづけて16進数の文字コードを並べることで、当該文字を表示することができる。ここで指定する文字符号化方式は UCS-4UTF-32)である。

UTF-8

UTF-8 は、ASCIIコードと互換性を持たせるため、ASCIIコードと同じ領域は1バイトで、それ以外の領域を2~4バイトで表現する可変長コードである。HTMLをはじめ、Webでテキストを交換するときによく使われるコードである。
UTF-8の領域
バイト長 UCS-4 バイト列 備 考
1バイト 最小 U+0000 00 ASCII文字
最大 U+007F 7F
2バイト 最小 U+0080 C2 80 ラテン補助~ンコ文字
最大 U+07FF DF BF
3バイト 最小 U+0800 E0 A0 80 サマリア文字~記号,
CJK統合漢字~特殊用途文字
最大 U+FFFF EF BF BF
4バイト 最小 U+10000 F0 90 80 80 線文字B音節文字~顔文字,
CJK統合漢字拡張~補助私用領域
最大 U+1FFFF F7 BF BF BF
UTF-8 のメリット
  • バイト単位で文字列検索や分離を行っても、バックスラッシュと円マークに起因するような文字化けを起こさない。
  • ASCII文字が主体のテキストでは、データサイズをコンパクトにできる。
UTF-8 のデメリット
  • 文字列長(文字の個数)を計算するのに手間がかかる。
  • 漢字の多くが3バイトとなり、日本語テキストではシフトJIS よりデータが肥大化する。
文字符号化方式の比較
  A 𦿶
JIS面区点 1-3-33 1-4-2 1-20-33 1-94-69 2-86-74 2-87-1
SJIS 41  82 A0 8A BF ? ? ?
EUC-JP 41  A4 A2 B4 C1 8F EC BF 8F D9 BE ?
UCS-4 00 00 00 41 00 00 30 42 00 00 6F 22 00 00 9D D7 00 00 85 34 00 02 6F F6
UTF-16 00 41 30 42 6F 22 9D D7 85 34 D8 5B DF F6
UTF-8 41  E3 81 82 E6 BC A2 E9 B7 97 E8 94 B4 F0 A6 BF B6

参考サイト

(この項おわり)
header