utf-8

UTF-8(7)                    Linux Programmer's Manual                   UTF-8(7)



名前
       UTF-8 - ASCII と互換性のある多バイト Unicode の符号化

説明
       ユニコード(Unicode) 文字集合は16ビットのコード空間を占めている。最も単純な Unicode の 符号化(
       UCS-2として知られている) は16ビット・ワードで構成されている。その文字列は '\0' や '/' のようなファイル名や C
       のライブラリ関数で特殊な意味を持つバイトを 含んでいる場合がある。更に、ASCII を期待する大多数の UNIX ツールは 大幅な変更なしには
       16ビット・ワードを読むことができない。これらの 理由により UCS-2 はファイル名やテキスト・ファイル、環境変数など外部の Unicode
       の符号化としては不適切である。 ISO 10646 Universal Character Set (UCS), は Unicode
       のスーパーセットで 31ビットのコード空間を占めており、その 最も単純な符号化 UCS-4 は (32ビット・ワード列として)同じ問題がある。

       Unicode UCS UTF-8 符号化はこれらの問題がなく、Unix形式の OS のもとで Unicode
       文字集合を使用する方法である。


性質
       UTF-8 符号化は以下のような素晴しい性質を持っている:

       * UCS 文字のうち 0x00000000 から 0x0000007f まで (古典的な US-ASCII の文字)は(ASCII
         との互換性のために)単純に 0x00 から 0x7f のバイトに 符号化する。これは 7ビット ASCII 文字のみを含むファイルや文字列に
         関しては ASCII UTF-8 で同じ符号化を行なうことを意味する。

       * 0x7f より大きいの全ての UCS 文字は 0x80 から 0xfd までの範囲のバイトのみを含む多バイト文字列 に符号化される。ASCII
         でないバイトにはこれらのバイトしか含まれな いので '\0' や '/' の問題は発生しない。

       * UCS-4 の辞書的ソートの順序は保存される。

       * 全ての可能な 2^31 UCS コード を UTF-8 を使用して符号化できる。

       * UTF-8 符号化では 0xfe と 0xff のバイトは絶対に使用しない。

       * ASCII でない UCS の文字の多バイト列の最初のバイトは常に 0xc0 から 0xfd の範囲で表現
         されその文字が何バイトで構成されているかを示している。残りの多バイト 列は 0x80 から 0xbf
         の範囲である。これは同期を容易にし、符号を ステートレスにし、バイトの紛失に対して堅固にする。

       * UTF-8 を使用した UCS 文字の符号化は最大 6バイトの長さになる。しかし Unicode 文字は最大でも
         3バイトにしかならない。Linux では UCS のサブセットである16 ビット Unicode のみが使用できる。Linux では
         UTF-8 多バイト列は 1バイトか 2バイトか 3バイトの長さになる。


符号化
       以下のバイト列は文字を表現するのに使用され、 どれを使用するかは文字の UCS コード番号に依存している:

       0x00000000 - 0x0000007F:
           0xxxxxxx

       0x00000080 - 0x000007FF:
           110xxxxx 10xxxxxx

       0x00000800 - 0x0000FFFF:
           1110xxxx 10xxxxxx 10xxxxxx

       0x00010000 - 0x001FFFFF:
           11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x00200000 - 0x03FFFFFF:
           111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x04000000 - 0x7FFFFFFF:
           1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       xxx ビットの部分は2進数で表わした文字コードのビット部分が対応する。 その文字を表現するのに最も短いバイト列のみが使用できる。


       Unicode 文字の 0xa9 = 1010 1001 (コピーライト・マーク) は UTF-8 で符号化すると

              11000010 10101001 = 0xc2 0xa9
       になる。

       0x2260 = 0010 0010 0110 0000 (不等号)は

              11100010 10001001 10100000 = 0xe2 0x89 0xa0
       になる

準拠
       ISO 10646, Unicode 1.1, XPG4, Plan 9.

著者
       Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

関連項目
       unicode(7)



Linux                              1995-11-26                           UTF-8(7)